这是关于我学习oc时的一些注释
->和.的区别
->访问成员变量
.是调用setter,getter方法来访问成员变量
用.语法访问成员属性时,@property方法会自动提供setter,getter方法,.语法会调用setter,getter方法,由于是系统自动建立的setter,getter方法,其名字会和@property后面你自己写的东西的名称相同,但如果你使用了自己建立的setter getter方法并起了自己的名字,那么.语法后面跟的东西就必须是你自己建立的setter,getter的名称。
atomic指示符的作用:
- 是默认的
- 对同一对象的set和get的操作是顺序执行的
- 速度不快,因为要保证操作整体完成
- 线程安全,需要消耗大量系统资源来为属性加锁
- 使用atomic并不能保证绝对的线程安全,对于要绝对保证线程安全的操作,还需要使用更高级的方式来处理,比如NSSpinLock、@syncronized等
nonatomic指示符的作用:
- 不是默认的
- 更快
- 如有两个线程访问同一个属性,会出现无法预料的结果
- 非线程安全,适合内存较小的移动设备
指示符
readonly、readwrite:readonly指示系统之合成getter方法,不再合成setter方法;readwrite是默认值,指示系统需要合成setter,getter方法。
retain:使用retain指示符定义属性时,当把某个对象赋值给该属性时,该属性原来所引用的对象计数减1,被赋值对象的引用计数加1。//不用
- ARC机制:代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。
assign: 简单赋值,不更改索引计数(Reference Counting)。
使用assign: 基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
- copy: 建立一个索引计数为1的对象,然后释放旧对象
使用copy: NSString
- retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
使用retain: 其他NSObject和其子类
- weak 和strong的区别:
(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。
一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
NSMutableString
- NSMutableString是NSString的子类,所以,NSString的方法,NSMutableString都可以用
- 可变字符串的初始化创建
动态创建字符串
NSMutableString* ms1=[[NSMutableString alloc]initWithFormat:@"mutablestring"];//实例方法
NSMutableString* ms2=[NSMutableString stringWithFormat:@"mutablestring"];//类方法
用C中的字符串创建
NSMutableString* ms1=[[NSMutableString alloc]initWithUTF8String:"cString"];//实例方法
NSMutableString* ms2=[NSMutableString stringWithUTF8String:"cString"];//类方法
用OC中字符串创建
NSMutableString* ms1=[[NSMutableString alloc]initWithString:@"ocString"];//实例方法
NSMutableString* ms2=[NSMutableString stringWithString:@"ocString"];//类方法
- 注意可变字符串不能用如下方式创建
NSMutableString * ms1=@"abc"; //会报错