总结:
NSSting&NSMutableString:
拥有共享机制和恒定性,只能更改指针,而不能更改对象本身在堆内的数据。
伪更改:str1=[str1 stringByAppendingString: @"Whatever"]
等于的两种意思:值相等 ( [str1: isEqualToString str2] )和指针相等 ( str1 == str2 )。
例子,就好像搬家,地址改变了但是房子依旧存在,每一次改变都会制造一栋新的房子,所以说这种更改并不好。
NSMutableString拥有可变性,可以直接通过 [str appendString: @"String"] 来更改
NSMutableString最好在一开始就设定好它的capacity,方法: str = [str NSMutableString stringWithCapacity : capacity]
NSArray&NSMutableArray
和Array相比,还有没有特定顺序(无序)的Set,以及Dictionary,都具有常量性,他们都有Mutable的子类。
ARC 自动引用计数
协议 Protocol
协议是一个只描述外部接口,不提供实现(只能存在于.h文件里面)
它的里面不会包含实例变量,同时,它的@property是不会由编译器自动产生一个“_名字”的实例变量的。
它可以作为声明变量的一部分,但是不可以创建实例
有两种⚠️警告需要注意:没有遵守协议,将一个没有遵守协议的值赋给一个行为
可以通过 confirmsToProtocal: 来判断是否实现协议
协议本身可以互相继承,但是子协议中必须实现父协议
类别 Category
可以添加实例方法,可以添加类方法,可以重写基类方法。(不需要源代码)
不能添加属性,实例变量和已存在的重名的方法
命名规范:“类名+扩展方法.h/.m”
扩展 Extension
需要源代码!
可以添加属性,实例成员,类方法,实例方法,可以改写读写属性(可以放大,但是不可以缩小,例如可以从readonly变成readwrite,但是不可以颠倒)
扩展不允许外部访问:所以用于隐藏信息,或是用于类外不需要,但是类内需要的成员