gpt4 book ai didi

iphone - 在实例变量自动释放的控制台 (po) 中打印值

转载 作者:行者123 更新时间:2023-11-29 13:37:49 28 4
gpt4 key购买 nike

我有一个这样声明的变量:

@property (nonatomic, retain) NSMutableArray *aInfo;

一开始,如果我这样声明变量:

self.aInfo = [[NSMutableArray alloc] init];

在应用程序的每个点,我都可以使用断点停止执行并像这样打印变量内容:

po self.aInfo

但是,如果我用 autorelease 声明了变量(应该如此),我就再也看不到断点中的内容了...

self.aInfo = [[[NSMutableArray alloc] init] autorelease];

PD:如果我执行类似 NSLog(@"%@", self.aInfo) 的操作,我可以看到内容...

最佳答案

if I declared the variable with autorelease (as it should be)...

因为它不应该是。试试这个:

NSMutableArray *aNewArray = [[NSMutableArray alloc] init];
self.aInfo = aNewArray;
[aNewArray release];

或者使用一个方便的方法,它在自动释放池中,你不拥有,所以可以直接赋值:

self.aInfo = [NSMutableArray array];

或:

self.aInfo = [NSMutableArray arrayWithCapacity:20]; // use whatever number makes sense

请记住,当您将属性设置为“保留”时,它就是这样做的。它的合成访问器将释放旧分配并保留新分配。因此,如果您直接为其分配分配的实例,该实例将被保留两次,从而造成内存泄漏。*

*编辑:请参阅下面 deanWombourne 的评论。 alloc] init] autorelease 作为对保留属性的直接赋值将不会造成内存泄漏。但我仍然不相信它具有内存效率。

关于iphone - 在实例变量自动释放的控制台 (po) 中打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028696/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com