OC基础知识
1.实例变量命名规范:_name 下划线起始。国内编程无此习惯,要知道下划线起始的是实例变量
2.protected 继承类的时候可以用,即子类可用其父类的protected型实例变量
3.getter方法名称不能是 -(int)getAge这样,应写为-(int)age;
4.带形参的函数中“:”是函数名的一部分
5.设置器、访问器,即getter、setter方法
6.只读,就是没有setter方法,实例变量可以在getter方法中返回一个默认值,如果用@property属性,则自定义一个getter方法,且最好不要与默认getter方法名重名,例如:
@property(retain,nonatomic,getter=name2)NSString *name;
-(NSString *)name2;//自定义getter方法,在实现中,返回一个固定的name即可
(return @“mm”);
7.comond+鼠标点击函数名,可直接进入函数体
8.@property @synthesize
@property(retain,nonatomic)NSString* name;
@property(assign,nonatomic)int age;
@property(retain,nonatomic)NSString* name,*address,*hobby;
@synthesize name=_name,age=_age,address=_address,hobby=_hobby;
“=”等号不是赋值的意思。_name是编译器生成的实例变量,name,address,hobby等这些都是属性名称,可以理解为方法名,根据这些名称来生成setter和getter方法。调用时用 对象名.属性名,不能用 点运算符来调用后边的实例变量,像 对象名._name 这样是错误的。
@synthesize name,age,address,hobby;//代表实例变量声明,即默认为 name=name,age=age……实例变量名称随意取
9.stu.name=@"zzh";//点运算符方法赋值时直接调用setter方法,取值时自动调用的是getter方法,但它们的书写方法是一样的,都是 对象名.属性名,调用在“=”左边相当于调用setter方法,在“=”右边相当于调用getter方法
NSLog(@"我是来自%@的%@,我今年%d,我爱好%@",[stu address],stu.name,stu.age,[stu hobby]);
10.自定义setter和getter方法,命名最好与默认方法区分。自定义getter是为了达到只读目的,自定义setter是为了增加复杂功能,如:验证输入。以后编程中很少自定义setter和getter方法,验证一般在其他部分了。
11.线程安全:atomic多线程访问时保证线程安全(例如:同时多个窗口卖票,保证同一张票只卖给一个人)
nonatomic不保证线程安全(默认)
内存管理:assign默认值,直接赋值,不关心内存管理
retain 关心内存管理,使用retain使引用计数器加1
一般用法就是,原始数据类型用assign,指针型用retain,特殊模式下(比如代理模式)区别对待