[英]Why setting value with “self” cause memory leak?
我需要了解为什么在此代码中,如果我使用self.ws_data将ws_data变量赋值,而我仅使用ws_data而不赋值,则会发生内存泄漏。
self.ws_data是@property(副本)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设置为在其属性声明中进行复制 ,因此在通过该声明进行设置时会保留该字符串。
不使用自我。 无需通过那些访问器即可引用ivar。 这也意味着该变量不会被复制,因此当对它的引用消失时(如方法末尾)它将消失。
您需要副本的可能性很大。 您只需要在完成操作后释放它,就像在dealloc中一样。
您是否将其保留在其他位置,从而使此访问权限成为第二保留?
如果在这种情况下我理解正确(并且可能很长一段时间都没有进行iOS开发),因为您在属性上使用copy属性,那么您在做什么时您使用self.ws_data可以有效地在已分配的NSString上调用copy方法,该方法将创建一个保留计数为1的NSString的单独实例。
但是,原始的NSString(在上面的示例中分配的)在任何时候都不会释放,因此会泄漏。
你可以用...
self.ws_data = [[[NSString alloc]initWithContentsOfURL:url] autorelease];
...相反,我原本以为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.