解决方案 »
- iphone动画结束问题
- 新学ios开发,如何把已有文件导入iPhone中或iPhone Simulator里?
- 塞班平台:关于呼叫转移的一个问题。
- 网上加载数据: "error_info" = "Out rate limit";
- 为什么我在table view cell中添加的按钮不显示
- 我日你妈,我自己上传的资源,还不让我下载,还要满足资源积分
- button的点击事件貌似被抢
- IOS6的应用怎么隐藏状态栏,全屏显示
- 有一个比较棘手的需求希望大家能帮我想个思路
- 通过c++源码如何生成IOS可调用的动态库
- 我查查下面导航栏扫条码突出的那一项怎么实现的
- navigation直接push页面可以,但是用长按时间push后返回就出问题
{
return [[_name retain] autorelease];
}
如果你的实现和name的getter类似的话,结果就没有什么好惊讶的。要提醒的一点是,autorelease不会导致retainCount立即发生变化,而是由autoreleasepool中进行调整的
setter方法 - (void) setSpouse:(Person *)spouse
{
if(_spouse != spouse)
{
[_spouse release];
_spouse = [spouse retain];
}
}
getter方法- (Person *) spouse
{
return [[_spouse retain] autorelease];
}
对于@synthesis的属性来说,显然没有像你的代码一样,getSpouse时进行retain操作。
第一个输出:由于man和woman互相retain,所以woman的retainCount是2。
第二个输出:虽然访问了man.spouse,但由于spouse属性内部没有进行retain,所以woman的retainCount不变,仍然是2
第三个输出:由于调用了[man divorce],释放了man, woman相互的引用,所以各自的retainCount立即减1,结果是1对于你写的手动内存管理代码来说:
第一个输出:和上面的一样,木有区别,所以是2
第二个输出:由于你的spouse属性getter方法对_spouse进行了retain,所以在输出时的man.spouse.name导致其retainCount为3
第三个输出:[man divorce]里,又调用了两次self.spouse,所以本来释放后应该是1的,但却因为两次retain,导致变成了3