原子和非原子操作:原子(atomic)提供多线程安全,是为了防止在为写完的时候被另外的一个线程读取,造成数据错误。非原子(nonatomic)在内存管理当中,解析的访问器保留并自动释放返回的值,如果指定是nonatomic的,那么访问器只是简单的返回这个值。
内存管理的原则:1.凡是使用alloc retain new copy(开头)或者mutablecopy(开头)的方法,都需调用release或者autorelease来释放。2哪个类alloc,哪个类release,谁写alloc,谁负责release。【主】:1.凡是调用构造方法的类,必须在析构方法中释放,2.如果一个指针想要指向一个新的对象,必须释放旧的对象。3.copy mutablecopy 只对字符串有效。4.数组中添加一个元素,OC数组中,保存的都是对象的首地址,那么在MRC下,就等于对了一个指向对象空间的指针,所以这里隐含一个retain操作。当我们从数组中取出元素准备使用的时候,考虑持有的时间,如果想长时间持有该对象,那么使用retain,这样的话,当数组释放也不会影响到对象的使用,如果对象在数组释放之前使用,那么retain可以省略。所用我们可以:持用数组当中的元素全部使用retain,最后全部release。
iOS SDK 实现MVC的开发模式:MVC是模型、视图控制器开发模式,对于 iOS SDK,所有的视图都是视图层的,它应该独立于模型层,由控制器来控制。所有的用户数据都是模型,他因该独立于视图。所欲的控制器都是控制层的,由它负责控制视图,访问模型数据。
深拷贝和浅拷贝:深拷贝是直接复制引用对象本身,而浅拷贝只复制对象的指针,而不是复制引用对象的本身。
类别的作用,类别和继承的区别:类别可以在不获悉、不改变原来代码的情况上向里面添加新的方法,只能添加,不能修改删除,而且如果类别和原来类中的方法名产生命名冲突的时候,类别会覆盖原来的方法,应为类别具有较高的优先级。类别的主要作用有:1.将类的实现分散到多个不同文件或者不同框架中。2.创建私有方法的引用。3.向对象添加非正式协议。继承可以添加、修改和删除方法,并且可以增加属性。
类别和类扩展的区别:类别和类扩展的不同在于类扩展可以添加属性,而且类扩展添加的方法是必须实现的。
KVC和KVO:
KVC是键-值编码,是一种间接访问对象属性使用字符串来标识属性,而不是通过存取的方法,直接或者通过实例化变量来访问的机制。KVO:键值观察机制,它提供来观察某一属性变化的方法,极大的简化了代码
代理的作用:代理的目的是改变或者传送控制链,允许一个类在某些特定时刻通知到其他的类,而不需要获取到那些类的指针,可以大大减少框架的复杂度。