iOS内存管理

1,谁创建,谁释放(类似于谁污染,谁治理)。如果你通过allocnewcopy来创建一个对象,那么你必须调用releaseautorelease

2 函数中有返回的情形

在一个函数中创建并返回对象,需要把这个对象设置为autorelease

ClassA*Func1()

{

  ClassA*obj = [[[ClassA alloc]init]autorelease];

  returnobj;

}

3  除了dealloc方法以外,始终用.操作符的方式来调用property

     self.objB 或者objA.objB

4 容器对象的内存管理

     iOS中,容器对象对其内的对象拥有所有权,也就是说,当一个对象被插入到容器内时,其retainCount会加一,从容器内移除时,其retainCount会减一,当容器本身被release时器内所有对象的retainCount都会减一。

5稀缺资源包括文件,网络连接,缓存等,这些资源是很关键的系统资源,系统内其他应用可能会随时需要这些资源,所以,这些资源就不适合作为类的成员变量了,因为dealloc的实际调用时间,是否真正调用是我们无法控制的,很有可能造成稀缺资源被无意义的占用,二其他应用却无法获得相应资源。所以,随时申请随时释放是最好的选择。

6避免循环引用,如果两个对象互相为对方的成员变量,那么这两个对象一定不能同时为retain,否则,两个对象的dealloc函数形成死锁,两个对象都无法释放。

7不要滥用autorelease,如果一个对象的生命周期很清晰,那最好在结束使用后马上调用release,过多的等待autorelease对象会给内存造成不必要的负担。

8// assign


-(void)setTestObject:(id)newValue

{
   testObject= newValue;


}


//retain
-(void)setTestObject  :(id)newValue

{
   

if (testObject!=newValue)

{
       [testObject release];
       

 testObject=[newValue retain];
  

 } 
}


//copy
-(void)setTestObject :(id)newValue

{
   

if(testObject !=newValue)

 {
       [testObject release];
        

testObject =[newValue copy];
  

  }


}


asssign 相于于指针赋值,不对引用计数进行操作,注意原对象不用了,一定要把这个设置为nil


retain 相当于对原对象的引用计数加1


copy 不对原对象的引用计数改变,生成一个新对象引用计数为1

 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值