我需要理解为什么在这段代码中,如果我使用 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/