memory - 为什么将值设置为 "self"会导致内存泄漏?

标签 memory ios

我需要理解为什么在这段代码中,如果我使用 self.ws_data 为 ws_data 变量赋值,而不是如果我只使用 ws_data,我会发生内存泄漏。

self.ws_data 是一个@property (copy)NSString *,在dealloc 上释放。

dispatch_queue_t ws_queue = dispatch_queue_create("ws check win", NULL);
dispatch_async(ws_queue, ^{
    self.ws_data = [[NSString alloc]initWithContentsOfURL:url]; 
});
dispatch_release(ws_queue);

谢谢!

最佳答案

self.variableName 通过访问器访问变量。因为您的 ws_data NSString 在其属性声明中设置为 copy,所以当您通过该声明设置它时,该字符串将被保留。

不使用 self. 引用 ivar 而不通过那些访问器。这也意味着变量没有被复制,所以当对它的引用消失时(比如在你的方法结束时),它就会消失。

很可能您想要副本。您只需要在完成后释放它,就像您在 dealloc 中所做的那样。

您是否将其保留在其他地方,使此访问成为第二次保留?

关于memory - 为什么将值设置为 "self"会导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412782/

相关文章:

macos - OSX 设置页面大小

ios - 如何在ios 15上动态更改导航栏颜色?

ios - Xcode "Size to fit contents"禁用

ios - 回合制配对在 iOS 10 中不起作用

c++ - 关于CUDA中的固定内存,它有上限吗?

python - 在不知道模式的情况下加载非常大的 JSON 文件?

c - 如何解决 malloc() 损坏指针的情况?

ios - 下载 Javascript 以在 UIWebView 与 JavascriptCore 中执行

ios - 如何快速使用苹果的 Accelerate 框架来计算真实信号的 FFT?

memory - 直接映射缓存和完全关联缓存之间的区别