发表于: 2016-12-21 21:38:04
2 1123
今天完成的事情:复习类别
明天计划的事情:继续刚OC
遇到的问题:
@property什么时候用strong,什么时候用copy?
1.当字符串是不可变字符串NSString时,由于字符串是不可变的,所以不管是strong或者copy属性的对象,都是指向源对象copy浅拷贝。
2.当字符串是可变字符串NSMutableString时,strong增加对象引用计数,copy执行深拷贝,产生一个新对象,且copy属性对象指向这个新对象,copy属性对象类型始终是NSString而不是NSMutableString类型。
3.当源字符串是NSMutableString时,strong和copy性能上会有差异,如果是NSString就不存在这个问题了。
4.一般情况下NSString用copy,以免因可变字符串修改导致一些非预期问题。
另一个还没搜出来。
不明白什么事通过类别创建向前引用,在看看。
收获:
类别:
1.OC是动态运行时分配机制,可以为现有的类添加方法,即使没有这个类的源码(类别使扩展性增强)。类别是一种为现有类添加新方法的方式。
2.NSNumber *number = [NSNumber numberWithUnsignedInt:[string lenght]];把字符串长度装箱。
3.类别接口中可以添加方法,属性,但不能添加实例变量,属性也必须是@dynamic。
4.导入类别文件 #import "添加类别方法的类 + 类别.h“;
类别的两个局限性:
1.无法向类中添加新的实例变量,类别没有空间容纳实例变量。
2.名称冲突,类别中的而方法与现有的方法重名,类别具有更高优先级,原来的方法将不再可用。
类别的优势:
1.将类别的实现代码可以分散到多个不同文件或框架中。
2.创建私有方法的前向引用。(虽然我还是不太明白,先写上吧)
3.向对象添加非正式协议。
类扩展:
1.不需要名字。
2.可以自己的类中使用。
3.可添加实例变量。
4.可以将制度权限改为可读写权限。
5.创建数量不限。
利用类别可以分散实现代码,类别可以访问其继承的类的实例变量,类别的方法具有最高优先级。(应用程序不能访问类里面的私有变量方法)。
非正式协议和委托类别:
类别可以声明非正式协议,非正式协议是NSObject的一个类别,它列出对象可以响应的方法。非正式协议用于实现委托,委托是一种允许定制对象行为的技术。
委托(delegate)是一种对象,由另一个类请求执行某些工作,编写委托对象并且将其提供给其他一些对象,通常是cocoa框架中的对象,通过实现特别的方法,控制cocoa中对象行为。
[[NSRunLoop currentRunLoop] run];
等待某些事情发生前一直处于阻塞状态。
响应选择器
@selector(方法名)快速查询方法名是否存在。
评论