ViewController顾名思义,用于控制内部的所有VIew。view controller 有几种类型,比如容器式:split view controller 多用于ipad,container view controller,navigation view controller等。这些容器式的,大部分都没有常见VC的功能逻辑,通过包含一个或者多个childviewcontroller 来实现。

点我阅读全文...

在iOS中,使用窗口window和视图view来表达屏幕上的内容。windows只给app的视图们提供一个基本的容器container,自身并没有任何可见的内容。视图定义了你想在window里填充的部分内容。

任何程序都有至少一个窗口和一个表达内容的视图。UIKit或者其他系统提供预先定义好的视图view,你可以用这些view表达内容。这些视图包含按钮,label,更复杂一些的油table,collectionview,picker等。如果这些预定义的视图不满足你的要求,你可以自己定义custom驶入,自己管理绘制drawing和事件处理。

在iOS中,一个视图是一个UIview的实例。管理了app window的一个矩形区域。驶入的职责是绘制内容,处理多种点击事件和管理view的字视图subviews的布局layout。绘制drawing这个操作调用了很多图形技术,例如core graphics,openGL ES。drawing也使用uikit在view的矩形区域内来绘制图形,图片和文字。一个view负责响应矩形区域内的点击事件(通过使用手势识别或者直接处理点击事件)。在视图的层级中,parentview负责处理字视图的大小和位置,这个操作可以动态完成的。这种操作子视图的能力能够让view很好的适配一些变化的情况,比如设备终端的物理旋转和动画等。

可以把view当成构建用户界面的block。常见做法是使用不同的view创建层级关系,而不是在一个视图里表示所有内容。处于层级关系里的view只表达界面的部分内容(view负责自己最擅长,最优化的内容),比如,UIkit有专门用于显示文字,图片等内容的view。

点我阅读全文...

应用程序内存管理是在您的程序运行时分配内存,使用它并在完成时释放内存的过程。一个写得很好的程序尽可能少地使用内存。在Objective-C中,它也可以被看作是将有限内存资源的所有权分配给许多数据和代码段的一种方式。

OC提供两种内存管理方式:手动管理内存MRR(manual retain-release),自动自动引用计数ARC。ARC使用和MRR一样的引用计数方法,在编译器加入管理内存的方法。

点我阅读全文...

键值观察提供了一种机制,允许对象在其他对象的特定属性值修改是收到通知。 这对于应用程序中的model层和controller层之间的通信特别有用。 (在OS X中,controller层绑定技术在很大程度上依赖于键值观察。)controller对象通常会观察model对象的属性,View对象通过controller观察Model对象的属性。 另外,Model对象可以观察其他Model对象(通常用于确定依赖值何时发生变化),甚至可以观察其本身(再次确定依赖值何时发生变化)。
您可以观察属性,包括简单属性,一对一关系和多对多关系。 多对多关系的观察者会被告知所做更改的类型以及参与更改的对象。

点我阅读全文...

许多人将性能等同于速度。事实上,如果一个程序能在一秒钟内完成一项复杂的操作,你可能会认为该程序性能良好。可是,这里这个速度可能是一种误导性的测量。在复杂的软件系统中,操作速度不是固定值。如果您在不同条件下多次执行相同的操作,则完成该操作所需的时间可能差异很大。这是因为程序只是在本地系统上共享资源的许多进程之一,并且这些资源的使用(或滥用)会影响所有其他进程。

点我阅读全文...

并行编程旨在解决如何更高效的使用多核处理器来处理一个程序内的多个并发任务问题。(用户界面,后台任务)现代的并行编程技术,在OSX和iOS平台上主要使用的是GCD(大型中央调度),这个技术比传统的thread管理好的地方是,它是基于操作系统级别的,剥离了应用程序,节约了线程的调用堆栈。其次对于不同平台,GCD可以统一管理,类似某种线程池的技术,对于不同的系统,和系统的运行状态,自动处理thread的各种问题。Operation Objects是基于GCD封装的Objective-C对象。

点我阅读全文...

what is? 一个循环:线程进入并且用于于执行事件处理,目的为了响应某些incoming 事件。你的代码负责提供状态控制,用于实现runloop的实际循环部份(loop 循环体)。换句话说,你的代码提供的 while/for 循环驱动了run loop,在你的循环内,你是用一个runloop对象去“执行”事件——处理接受很多事件和安装事件处理方法的代码。

点我阅读全文...

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

点我阅读全文...

内容提要 川藏路书,为自行车和自驾进藏的人们指路(仅限318国道成都到拉萨一段)。主要功能: 1,可以实时查看海拔高度和距离拉萨的公里数(需网络支持); 2,解答几乎所有关于骑自行车走川藏线的问题,包括但不限于装备,体能,路况,住宿等; 3,安全指南,安全出行。 4,专门为藏区网络不佳、通信不畅而设计,大量离线信息,无需网络支持。 内容的绝大部分来源于广泛流传的波尔路书,小部分来源于作者个人2012年7月的亲身经历。川藏线只有一个,她就在那里。你翻过的,只是心中的一座山。车友们,加油! ====================反馈:feedback======================== 请大家把反馈写到评论里,谢谢。 =======================================================

点我阅读全文...

<藏地唐卡> :从西藏回来后构思的应用,近距离感受唐卡的美。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 lustre, but because of their delicate nature, they have to be kept in dry places where moisture won’t affect the quality of the silk. It is sometimes called a scroll-painting. ======================================= 唐卡(Thang-ga)也叫唐嘎,唐喀,系藏文音译,指用彩缎装裱后悬挂供奉的宗教卷轴画。唐卡是藏族文化中一种独具特色的绘画艺术形式,题材内容涉及藏族- 的历史、政治、文化和社会生活等诸多领域,堪称藏民族的百科全书。传世唐卡大都是藏传佛教和苯教作品。

点我阅读全文...

原文链接: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 对象

点我阅读全文...