1.简述OC中内存管理机制。与retain配对使用的方法师dealloc还是release,为什么?需要alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,reatin,copy,nonatomic,actomic,strong,weak属性的作用?
答案:OC中使用了一种叫做引用计数的管理机制来管理内存中的对象。OC中的每个对象都对应着它自己的引用计数,当alloc方法创建对象时,持有引用计数会自动加1,当你向一个对象发送一个reatain消息时,引用计数同样会加1.相反当你向对象发送release消息时,持有计数减1,当对象的持有计数变为0时,对象会自动释放自己所占用的内存。
retain:引用计数+1——release:引用计数-1
alloc:申请内存空间——dealloc:释放内存空间
readwrite:表示既有getter,也有setter(默认)
readonly:表示只有getter,没有setter
nonayomic:不考虑线程安全
atomic:线程安全操作(默认)
线程安全情况下的setter和getter
-(NSString *)value{
@synchronized(self){
@synchronized(self){
return[[_value reatin] autorelease];
}
}
(void)setValue:(NSString*)value{
@synchronized(self){
[aValue retain] ;
[_value release];
_value=aValue;
}
}
}
reatin:release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
assign:简单赋值,不更改索引计数(默认)
copy:其实就是建立了一个相同的对象,地址不同(retain:指针拷贝 copy:内容拷贝)
strong:(ARC下的)和(MRC)retain一样(默认)
weak:(ARC下的)和(MRC)assgin一样,weak当指向的内存释放掉自动nil化,防止野指针
unsafe_unretained声明一个弱应用,autoreleasing用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。