在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下:
1.命名约定
对象类型和名称一致,以免混淆
-(void) setURL:(NSString *)URL;//错误的命名方法 //更改为 -(void)setURLString:(NSString *)string; -(void)setURL:(NSURL *)URL;
静态变量(包括作用域)以s开头,而全集变量采用g开头,在通常情况下应避免使用常量之外的全局变量:
static MYThing *sSharedInstance
常量在Cocoa和Core Foundation中以k开头,在Cocoa中则不是,建议文件作用域内的(静态)常量都以k开头:
static const NSUInteger kMaximumNumberOfRows=3; NSString *const MYSomethingHappenedNotification=@"SomethingHappeded";
方法参数名称通常要加一个冠词(a,an,the)(楼主注:貌似不是很常见啊),用这种方式对参数进行命名可以避免与方法中的局部变量和实例名称混淆
实例变量以下划线开头
类名以大写字母开头,方法名和变量名则应该以小写字母开头,所有类名,方法名都采用驼峰式大小写(即每个单词的首字母大小写)进行分隔,而不采用下划线
2.自动引用计数
ARC不是垃圾回收,它只是一种编译器优化,因此它不能处理循环引用的问题:
垃圾回收机制如果外部对象到对象A的引用链接中断,则对象A和对象B都会被销毁,但那时ARC中因为A,B的相互引用,其引用计数都大于1,因此在IOS开发中必须做好对强引用的管理
属性的关系有两种主要类型:strong和weak,相当于非ARC环境中的retain和assign,只要存在一个强引用对象就会一直存在,不会被销毁。而weak在引用的对象被销毁后,weak的引用会被自动置为nil,所以delegate的属性总是应该声明为weak。
3.属性
在头文件声明公有属性,.m文件中声明私有属性:
//MyClass.h @interface class: NSObject @property (nonatomic,readwrite,weak) id delegate; @property (noatomic,readonly,strong) NSString *readonlyString;
@end //MyClass.m @interface MyClass() @property (noatomic,readwrite,strong) NSString *readonlyString; @property (noatomic,strong) NSString *privateString;
@end
编译器会自动创建_delegate,_readonlyString,_privateString几个变量,不过只能再init,dealloc中调用这些实例变量
另外可以看到在.m文件中重新声明了一下readonlyString变量,为它增加了一个setter的私有方法
属性的修饰关键字:
1)原子性(atomic,nonatomic)
本意是指属性的存取器方法是线程安全的,并不保证整个对象是线程安全的。比如使用NSMutableArray声明一个stuff,使用
self.stuff和self.stuff=otherstuff(只涉及到存取),而采用objectAtIndex的方法访问数组的时候并不是线程安全的。
但是如果属性并不需要其他线程访问的时候,使用原子属性是一种极大的浪费,因此通常情况下采用的是nonatomic
2)读写属性(readwrite和readonly)
3)设置方法修饰的关键词(weak,strong,copy)
注意的是对于不可变类如NSString和NSArray使用copy修饰