对于开发的新手来说 对象间指针传递的概念还是很容易出错的。 最容易出现“循环引用
”导致对象内存得都不到释放。
这就好比:
对象
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,
nonatomic)
registerViewController *myRegisterViewController
;
.......
在
"MainViewController.m"
文件中
registerViewController *myRegrViewController = [[
registerViewController
alloc]
initWithNibName:
@"registerViewController"
bundle:
nil];
文件中 定义了这样的一个属性
@property(retain,nonatomic) MainViewController *mainViewC;//return 属性导致 retainCount+1 = 2
mainViewC 得不到销毁 导致
改进方式:
@property(assign,nonatomic)
同时在 delloc 中移出对 mainViewC的释放;