ios 开发 对象引用陷阱 解析

对于开发的新手来说 对象间指针传递的概念还是很容易出错的。 最容易出现“循环引用 ”导致对象内存得都不到释放。
         这就好比:
          对象 a 创建并引用到了对象 b。  对象 b 创建并引用到了对象 c.  对象 c 创建并引用到了对象 b.
       这时候 b c 的引用计数分别是 2 1 。当 a 不再使用 b ,调用 release 释放对 b 的所有权,因为 c 还引用了 b ,所以 b 的引用计数为 1 b 不会被释放。 b 不释放, c 的引用计数就是 1 c 也不会被释放。从此, b c 永远留在内存中。
         
         身为菜鸟,深受其害啊。
         分析下:第一款开发存在的问题
         在"MainViewController.h"
         中声明了:
           @property( retain, nonatomicregisterViewController *myRegisterViewController ;
            .......
           "MainViewController.m"
       文件中 
                          registerViewController *myRegrViewController = [[ registerViewController alloc] initWithNibName: @"registerViewController"  bundle: nil];

            self.myRegisterViewController = myRegrViewController;

            myRegisterViewController.mainViewC = self; //再 去看看 mainViewC 是什么 应为mainViewC拥有retain 属性 导致 self 的retainCount = 2;

            [myRegrViewController release];

 发现 在 registerViewController.h

文件中 定义了这样的一个属性

 

@property(retain,nonatomic) MainViewController *mainViewC;//return 属性导致 retainCount+1 = 2

mainViewC 得不到销毁 导致 myRegisterViewController 得不到销毁。

改进方式:

@property(assign,nonatomicMainViewController *mainViewC;

同时在 delloc 中移出对 mainViewC的释放;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值