1,使用Extension,编译器会期望在此扩展的主”.m”文件下实现方法或属性。Category相当于扩展分离了当前的 @implement ,使他们在不同的文件实现。2,Category不支持属性@property。3,Category一般用于扩展不属于自己创建的类的方法,也可以用于 当前类的私有方法。Extension广泛用于创建私有属性和方法。

<藏地唐卡> :从西藏回来后构思的应用,近距离感受唐卡的美。iphone版:http://t.cn/zjz4twb ;iPad版<藏地唐卡HD>同步推出:http://t.cn/zjz4V3G 相信我绝对超值。 iPhone: iPad 西藏唐卡,藏地唐卡,tibetthangka,唐卡,thangka,唐喀,唐嘎,Thang-ga,tibetan thangka,西藏特色thangka,thangka,tibet thangka,藏传佛教,苯教,тханка,チベット,タンカ,티벳의,탕카 App Name 藏地唐卡 Over hundreds of HD beautiful thangka photos,you can see more details of these awesome Artworks.Use two finger to zoom in or zoom out. Also can save to photo albumen set as a wallpaper. ======================================= 数百张精美的高质量HD唐卡图片,这次可以看到更多细节。所有图片都可以储存并且设为桌面。 ======================================= Thangka is a Tibetan silk painting with embroidery, usually depicting a Buddhist deity, scene, or mandala of some sort. The thankga is not a flat creation like an oil painting or acrylic painting but consists of a picture panel which is painted or embroidered over which a textile is mounted and then over which is laid a cover, usually silk. Generally, thangkas last a very long time and retain much of their[…]

原文链接:http://www.cnblogs.com/bestzrz/archive/2011/09/03/2164620.html 作者Rongie Zeng 前段时间给客户网站做新浪微博账号登录功能,对OAuth协议以及相关的一些安全协议做了一些研究,顺便就记录一下学习心得吧。在这里就不打算具体讲OAuth的协议流程了,而是针对OAuth请求头里的nonce(随机数)、timestamp(时间戳)、signatrue(签名)这些参数的作用做一下总结。 首先看一下HTTP规范里定义的Basic认证。 Basic认证及其安全问题 Basic认证是一个流程比较简单的协议,整个过程可以分为以下三个步骤: a) 客户端使用GET方法向服务器请求资源。 b) 服务器返回401响应码和WWW-Authentication:Basic realm=”Family”响应头要求客户端进行身份验证。其中realm声明了资源所在的域。 c) 浏览器接收到以上HTTP响应头后,弹出登录框要求用户输入用户名和密码;用户提交的用户名和密码通过冒号串联起来并对其进行BASE64编码后再提交到服务器;服务器对提交上来的BASE64字符串进行验证,如果验证通过则返回200响应码。 Basic认证虽然简单、方便,但它只能作为对非敏感资源的访问认证,因为它并不安全,主要表现在以下几个方面: 1、 客户端提交的用户名和密码只经过简单的编码,攻击者只要窃听到该数据包,便可很容易的将其反编码为原始用户名和密码。 2、 即使客户端使用了一种比BASE64更复杂的编码方式使得攻击者无法对其反编码,攻击者也可以使用fiddler等工具将拦截到的HTTP报文重新提交给服务器,服务器只对编码的字符串进行验证,所以验证同样能通过。这种攻击方法称之为重放攻击(Replay-Attack)。 以上两个问题也是各种身份认证协议需要考虑到的安全问题,包括OAuth、Digest认证、NTLM认证等等认证机制都使用了nonce和timestamp来解决这些问题。 Nonce、Timestamp——解决Replay-Attack问题 Nonce是由服务器生成的一个随机数,在客户端第一次请求页面时将其发回客户端;客户端拿到这个Nonce,将其与用户密码串联在一起并进行非可逆加密(MD5、SHA1等等),然后将这个加密后的字符串和用户名、Nonce、 加密算法名称一起发回服务器;服务器使用接收到的用户名到数据库搜索密码,然后跟客户端使用同样的算法对其进行加密,接着将其与客户端提交上来的加密字符 串进行比较,如果两个字符串一致就表示用户身份有效。这样就解决了用户密码明文被窃取的问题,攻击者就算知道了算法名和nonce也无法解密出密码。 每个nonce只能供一个用户使用一次,这样就可以防止攻击者使用重放攻击,因为该Http报文已经无效。可选的实现方式是把每一次请求的Nonce保存到数据库,客户端再一次提交请求时将请求头中得Nonce与数据库中得数据作比较,如果已存在该Nonce,则证明该请求有可能是恶意的。然而这种解决方案也有个问题,很有可能在两次正常的资源请求中,产生的随机数是一样的,这样就造成正常的请求也被当成了攻击,随着数据库中保存的随机数不断增多,这个问题就会变得很明显。所以,还需要加上另外一个参数Timestamp(时间戳)。 Timestamp是根据服务器当前时间生成的一个字符串,与nonce放在一起,可以表示服务器在某个时间点生成的随机数。这样就算生成的随机数相同,但因为它们生成的时间点不一样,所以也算有效的随机数。 问题又来了,随着用户访问的增加,数据库中保存的nonce/timestamp/username数据量会变得非常大。对于这个问题,可选的解决方案是对数据设定一个“过期时间”,比如说在数据库中保存超过一天的数据将会被清除。如果是这样的,攻击者可以等待一天后,再将拦截到的HTTP报文提交到服务器,这时候因为nonce/timestamp/username数据已被服务器清除,请求将会被认为是有效的。要解决这个问题,就需要给时间戳设置一个超时时间,比如说将时间戳与服务器当前时间比较,如果相差一天则认为该时间戳是无效的。 HTTP消息体的加密 很不幸的是,经过上面这些复杂的处理后,我们的数据传输仍然是不安全的。我们都知道,http报文是以明文的方式在网络中传输的,包括Basic认证、Digest认证、OAuth、NTLM等等验证这一些认证机制都只是对HTTP头的信息作保护,而对于Http消息体的数据却没有作加密。以新浪首页的登录为例,它的账号就是以明文的方式传送的,如下图所示: 这样的方式是很不安全的,用户名和密码完全以明文的方式提交了。同样是新浪的网站——新浪微博就在登录前作了加密过的,如下图所示: 加密的方法可以参考前面讲到的nonce+timestamp的方案。不过这只解决了登录的问题,在注册时就不能提交使用nonce和timestamp非可逆加密了,这个时候要使用非对称加密。在用户打开注册页时,服务器生成一个公钥/私钥对并将公钥返回给客户端,客户端使用该公钥将密码加密后提交到服务器,服务器使用私钥解密后再保存到数据库。非对称加密算法的特点是每一个公钥和私钥都是一一对应的,使用公钥加密后只有拥有私钥的人才能进行解密,所以攻击者截取到http报文也毫无用处。 当然,在条件允许的情况下,可以使用SSL来实现HTTP报文的加密,这种方案是在应用层和传输层中间添加一个SSL层,该层使用对称加密的方法将HTTP报文加密后再传递到传输层,如下图所示: 在 这之前,客户端与服务器需要使用非对称加密的方法来协商用于对称加密的公钥,对称加密要求加密者和解密者拥有同一个密钥(即公钥)。当客户端首次访问页面 时,需要生成一个公钥给服务器,而这个公钥不是不可以给第三方知道的(知道了这个公钥就可对数据进行解密了),所以需要服务器首先生成一个公钥/密钥对,并使用生成的公钥加密客户端生成的公钥(非对称加密),这一个过程与前面讲到的注册密码加密的方式类似。 正因为在正式数据传输之前需要在服务器跟客户端之间进行几轮的协商,所以HTTPS相比HTTP来说安全性会高些、而性能会差些。

在 iOS 中,一个 UIResponder 对象表示一个可以接收触摸屏上的触摸事件的对象,通俗一点的说,就是表示一个可以接收事件的对象。 iOS 中,所有显示在界面上的对象都是从 UIResponder 直接或间接继承的。 下面是 UIResponder 类的一些定义信息: 触摸事件相关: 方法名称 说明 touchesBegan:withEvent 当用户触摸到屏幕时调用方法 tochesMoved:withEvent 当用户触摸到屏幕并移动时调用此方法 tochesEnded:withEvent 当触摸离开屏幕时调用此方法 tochesCancelled:withEvent 当触摸被取消时调用此方法 运动事件相关: 运动事件是指当用户以特定方式移动设置,如摇摆设置时,设置会产生运动事件,由以下几个方法进行处理: 方法名称 说明 motionBegan:withEvent 运动开始时执行 motionEnded:withEvent 运动结束时执行 motionCancelled:withEvent 运动被取消时执行 响应对象链相关: 方法名称 说明 isFirstResponder 指示对象是否为第一响应者,这里的第一响应者就是当前有焦点的对象,叫法挺奇怪的,第一次看到真还难以理解这个叫法所表达的意思 nextResponder 下一个响应者,在实现中,一般会返回父级对象 canBecomeFirstResponder 获取一个布尔值,指定对象是否可以获取焦点 becomeFirstResponder 把对象设置为 firstResponder 对象 canResignFirstResponder 对象是否可以取消 firstResponder 对象 resignFirstResponder 取消对象为 firstResponder 对象

这个实际上是《Objective-C 2.0 程序设计》第八章 练习题第6题,觉得挺有意思,就分享一下。还没看答案,这个是我能想到的最优算法了,一会儿去看看答案如何。

已知矩形Rectangle类继承自GraphicObject类(这个类 和本次的操作没有任何关系); 座标 XYPoint类,代码如下:

Rectangle类,Rectangle声明一个intersect方法,该方法传入一个矩形作为参数, 返回一个重叠的Recangle类型的对象,Rectangle类有座标origin作为属性,origin是XYPoint类型。[还有更多……]