autoreleasepool中第一个用工厂方法创建的对象会在最后被释放?

发布于 2022-09-02 09:47:16 字数 1372 浏览 20 评论 0

初学者,一直没搞懂ARC模式下autoreleasepool对象释放的问题,后来发现autoreleasepool中第一个用工厂方法创建的对象会在最后被释放,不知道是不是这样?还是我哪里搞错了?所以。。为什么会出现这样的输出呢?

似乎只有第一个autoreleasepool会这样,后面的包括嵌套的autoreleasepool都不会出现这个问题。

代码如下,NSMutableArray和NSMutableDictionary都重写了dealloc方法。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithCapacity:10];
        NSMutableArray *array1=[NSMutableArray arrayWithCapacity:10];
        NSMutableArray *array2=[NSMutableArray arrayWithCapacity:10];
        __unused NSMutableArray *array3=[NSMutableArray arrayWithCapacity:10];
        dict = nil;
        array1 = nil;
        NSLog(@"------------");
        array2 = nil;
        NSLog(@"continue......");
    }
    NSLog(@"After AutoReleasePool");
    return 0;
}

输出结果:

2016-03-03 22:44:25.452 ARC[13973:3216802] NSMutableArray released
2016-03-03 22:44:25.453 ARC[13973:3216802] ------------
2016-03-03 22:44:25.453 ARC[13973:3216802] NSMutableArray released
2016-03-03 22:44:25.453 ARC[13973:3216802] continue......
2016-03-03 22:44:25.454 ARC[13973:3216802] NSMutableArray released
2016-03-03 22:44:25.454 ARC[13973:3216802] NSMutableDictionary released
2016-03-03 22:44:25.454 ARC[13973:3216802] After AutoReleasePool
Program ended with exit code: 0

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海里的那抹蓝 2022-09-09 09:47:16

NSMutableArray和NSMutableDictionary的 dealloc 方法可以重写?表示不会.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文