发表于: 2016-12-21 21:38:04

2 891


今天完成的事情:复习类别
明天计划的事情:继续刚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(方法名)快速查询方法名是否存在。



返回列表 返回列表
评论

    分享到