如果我的代码看起来像这样:
-(void) func {
ObjectA* A = [[ObjectA alloc]init];
[something doSomething:blah andDelegate: A];
}
假设doSomething的调用将进行http请求调用,因此仅当从服务器收到响应时才会调用委托。在这种情况下,会有延迟。 注意:某些东西是类的实例变量。
如果我两次调用'func',那么在收到对代表的回复之前,A的初始化是否会被泄露。假设在收到响应时调用委托函数时有释放操作。
我之所以这么想是因为如果第二个初始化的'A'在第一个委托完成它的角色之前作为委托传递给了某个东西。第二次初始化'A'会取代第一次初始化'A'吗?
答案 0 :(得分:4)
是的,如果您没有使用ARC进行编译,则会发生泄漏。您正在使用alloc
创建一个对象,这意味着您拥有它,并且您不会通过发送release
放弃该所有权。这是core memory management rule for Cocoa。
您传递的something
对象A
也可能需要拥有A
(事实上,听起来就是这种情况)。如果是,something
应将retain
发送至A
,然后在不再需要release
时发送A
。
第二次初始化'A'会取代第一次初始化'A'吗?
排序。名称A
仅在此方法中有效。当您创建一个对象并将其分配给A
,然后该名称超出范围时,您将无法再引用该对象。这就是泄漏。当您再次运行此方法时,基本上会创建一个新名称A
,并为其分配另一个对象。
答案 1 :(得分:1)
something
和func
应该发布A
。 something
在使用时也应保留A
。