- 重写一个NSStrng类型的,retain方式声明name属性的setter和getter方法
-(void)setName:(NSString *)name{
if(_name != name){
[_name retain];
[_name release];
_name = name;
}
}
-(NSString *)name{
return[[_name retain] autorelease];
}
2 简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
Notification (通知中心 ) 发布通知 注册观察者 移除观察者 通常是一对多的
KVC(键值编码)不使用属性,就可以对变量进行赋值
KVO (键值观察者)监听属性的变化,一旦发现属性值变化,触发事件
Delegate (代理)代理模式,由代理帮委托者完成一些事情
3 What is lazy loading?
延迟加载(又称懒汉模式)只在用到的时候才去初始化
最简单的一个例子就是tableView中图片的加载显示 :延迟加载,避免内存过高
4 什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?
Protocol—协议 协议是用来定义对象的属性,行为和用于回调的 @private 表示使用这个协议必须要写的方法 @optional 表示可选的方 法
Delegate是一种简单但是功能强大的设计模式。它的功能是程序中一个对象代表另一个对象,或者一个对象与另一个对象协同工作,委托对象保留另外一个对象的引用,即就是委托。
委托的@property声明用assign 防止循环引用
5 分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?
类目是对现有的一个类的拓展,生成私有方法,子类不能直接调用;但是通过继承,子类可以调用父类所有的属性和方法
延展是声明属性 不用实现方法
继承是子类对于父类已经拥有的方法和属性的继承 ,创建了一个新的类
类目还是原有的类,只是对原来的类进行了一定的功能扩充
类目中不能添加成员变量:因为类方法里面使用的都是静态变量,不能使用实例变量