0

如果我的代码如下所示:

     -(void) func {  
         ObjectA* A = [[ObjectA alloc]init];  

        [something doSomething:blah andDelegate: A]; 

    }

假设 doSomething 的调用将发出一个 http 请求调用,因此只有在收到来自服务器的响应时才会调用委托。在这种情况下,会有延迟。注意:something 是类的实例变量。

如果我两次调用“func”,A 的第一个初始化是否会在它收到委托的响应之前被泄露。假设收到响应后调用委托函数时有释放操作。

我之所以想到这一点,是因为如果在第一个委托完成它的角色之前,第二个初始化的“A”作为委托传递给了某个东西。'A'的第二个初始化会取代'A'的第一个初始化吗?

4

2 回答 2

4

是的,如果您不使用 ARC 进行编译,则存在泄漏。您正在创建一个带有 的对象alloc,这意味着您拥有它,并且您不会通过发送来放弃该所有权release。这是Cocoa 的核心内存管理规则

something您传递给的对象 可能A也需要拥有A(实际上,听起来就是这样)。如果是这样,something应该发送retain到不再需要时A再发送。releaseA

'A'的第二个初始化会取代'A'的第一个初始化吗?

有点。该名称A仅在此方法内有效。当您创建一个对象并将其分配给A,然后该名称超出范围时,您将无法再引用该对象。这就是泄漏。当您再次运行此方法时,本质上A会创建一个新名称并为它分配另一个对象。

于 2012-05-28T01:10:24.713 回答
1

something并且func应该释放A. something使用时也应保留A

于 2012-05-28T01:08:57.097 回答