积木和额外的保留

 松原连伟强_124 发布于 2023-02-10 08:12

当启用时ARC,以下代码使得物镜对于保留两次通过调用objc_retain()和objc_retainBlock().(因此retainCount块定义后变成3).

我检查了obj不在自动释放池中,并且在方法结束时有两个objc_release()调用obj.(我知道计数保留没有意义,但我正在检查objc_retain()调用,而不是几乎没有检查保留计数.)这背后的基本原理是什么?

-(void)myMethod
{
        NSObject *obj = [[NSObject alloc] init];
        NSLog(@"obj %@ retaincount %ld", obj, CFGetRetainCount((__bridge CFTypeRef)obj));
        void (^myBlock)(void) = ^() 
        {
            NSLog(@"obj %@ retaincount %ld", obj, CFGetRetainCount((__bridge CFTypeRef)obj));            
        };
        NSLog(@"obj %@ retaincount %ld", obj, CFGetRetainCount((__bridge CFTypeRef)obj));    
        myBlock();
}

仅仅保留obj一次以便通过块捕获它是不够的?

注意:此外,当我删除myBlock变量并调用它时,所以只使用^(){...}定义并且永远不会调用该定义,obj仍然保留objc_retain(),这看起来很奇怪.我正在使用XCode 4.3.2.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有