1.有alloc,new,copy创建出来的对象就必须有release,在类中是retain对oc类型对成员在该类对dealloc方法中也要release
2.一旦对象直接有引用关系,那么就一定有retain,同时在主对象销毁时,也必须对其引用对对象release。但是对象引用时,在retain时
注意是否引用对时同一个对象,若是不同对象就得先release旧对象,再retain新对象
代码:
-(void)setDog:Dog dog { if(dog!=_dog) { [_dog release]; [dog ratain]; _dog=dog; } }
举例:一个人买了一辆车,那么现在这个人拥有了这辆车,也就是车的retain一次,当这个人买了新车了,那么之前那辆车就和这个人没有关系了
那么就的release一次旧车,然后再retain一次新车,若这辆车没有换,那么就不做任何操作。如果人挂了的话,这辆车就会可能给别人,所
以,必须再人挂的时候,将车release一次,相当于解除了这个人和这辆车的关系了
3.@property关键字,用于简化我们频繁的写set,get的代码,他将会自动生产对于的方法,和字段(都是有一定的命名规范的,setXx ,xx,_xx)
@property的参数:
a.set方法内存管理的参数(各参数不能同时有)
retain:会自动release旧对象,retain新对象,适用于oc类型对象,如2代码
assign:直接赋值给对象成员,适用于非oc类型的对象
copy:release旧值,copy新值
b.是否生成set方法 (各参数不能同时有)
readwrite:可读可写,即set和get方法都会生成
readonly:只读,只生成get方法
c.多线程管理(各参数不能同时有)
nonatomic:性能高,通常都是用该参数
atomic:性能低,默认的参数
d.setter和getter重设方法的名称
setter:给set方法重命名,但是必须有冒号 ' : '
getter:给get方法重命名,一般用在bool类型的属性上
eg。 @property (nonatomic,readwrite,assign,setter=abc: ) int age
@property (nonatomic,retain) Dog dog
当用了setter或getter重命名方法时,再使用该对象时可以直接用 对象.成员名称 来取值或赋值,工具会自动检测时再用get还是
set方法的
4.@class 关键字:声明一个类,但是没有类里的实现,仅仅时做一个声明,给编译器看的,再运行的时候才去找实现
代替的import导入文件
使用的好处:解决里两个类互相引用的问题(import时不能互相导入的)
提高类程序的性能(用import的话,每次被导入的文件被改动,都会重新复制一份到当前类中,消耗性能,而class不用管)
5.当两个类互相引用时,再各自当dealloc方法中就必须对引用对对象release一次,这样就导致两个对象被咬死,无法释放内存,
解决方案:再其中任意一个类中,将引用另一个类对熟悉对property参数写成assign