一:KVC与KVO的区别!!
KVC是键值编码,可以通过一个字符串的key(属性名)修改对象的属性值
KVO是键值监听,可以监听一个对象属性值的改变,机制:当制定的呗观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。
二:类变量的@protected @private @public @package声明各有什么含义?
1.该类和所有子类中的方法可以直接访问这样的变量
2.该类中的方法可以访问,子类不可以访问
3.可以被所有的类访问
4.本包内使用,跨包不可以
三:通知和协议的不同之处?
1.通知:
通知需要有一个通知中心:NSNotificationCenter,自定义通知的话需要给一个名字,然后监听。
优点:通知的发送者和接受者都不需要知道对方。可以指定接收通知的具体方法。通知名可以是任何字符串。
缺点:较键值观察(KVO)需要多点代码,在删掉前必须移除监听者。
2.协议
通过setDelegate来设置代理对象,最典型的例子是常用的TableView.
优点:支持它的类有详尽和具体信息。
缺点:该类必须支持委托。某一时间只能有一个委托连接到某一对象。
五:内存管理的几条原则是什么?按照默认法则,哪些关键字生成的对象需要手动释放?哪些情况下不需要手动释放,会直接进入自动释放池?
• 当使用new、alloc或copy方法创建一个对象时,该对象引用计数器为1。如果不需要使用该对象,可以向其发送release或autorelease消息,在其使用完毕时被销毁。
• 如果通过其他方法获取一个对象,则可以假设这个对象引用计数为1,并且被设置为autorelease,不需要对该对象进行清理,如果确实需要retain这个对象,则需要使用完毕后release。
• 如果retain了某个对象,需要release或autorelease该对象,保持retain方法和release方法使用次数相等。
使用new、alloc、copy关键字生成的对象和retain了的对象需要手动释放。设置为autorelease的对象不需要手动释放,会直接进入自动释放池。
网友评论