2011-04-18 96 views
0
-(void) func1: (NSData*) somedata 
{ 
    //Processing somedata .... 

    [somedata release]; //is it necessay? 
} 
+1

有没有可能的方法来知道在这种情况下发布是否是必要的。 – dreamlax 2011-04-18 07:04:18

+0

您需要提供更多信息。从你的代码片段中,没有办法知道如何/何时/是否发生'somedata'的所有权。考虑编辑你的问题,并在获得'NSData *'实例的地方发布代码,以及如何将它传递给'-func1:'。 – 2011-04-18 07:12:15

回答

2

您不应该在您的方法中释放somedata

NSData *somedata = [[NSData alloc] init]; 
func1(somedata); 
[somedata release]; 

假设:

  • FUNC1在同一个线程中运行
+0

Somedata的原始拥有者如何知道什么时候不需要它。 SomeData会传递给另一个函数或另一个对象。 – lilzz 2011-04-18 07:22:12

+0

我将编辑我的文章 – cweinberger 2011-04-18 07:23:07

+0

如果someData来自一些复杂的委托函数并从回调函数接收到该怎么办。没有办法将[somedata发布]放入这些最初的代理函数或预期的代码中。 – lilzz 2011-04-18 07:33:18

1

你应该考虑将其释放。如果你保留它在这种情况下。但我不确定,因为你的问题没有提供是否需要发布的任何想法。但是如果你拥有它的话,通常你会得到release个对象。

+0

我可能会同意这一点,因为你得到了一些数据。原始的所有者不知道您是否完成了someData。只有你知道someData已经完成并且不需要。 – lilzz 2011-04-18 07:20:27

1

在这种情况下,不,你不应该释放你的对象。你不是“所有者”。作为一个经验法则,你需要释放的对象,一旦你如果正在使用它只是做:

  • 您通过[MyClass alloc]分配它,因为在[[MyClass alloc] init][[MyClass alloc] initWithFoo:foo bar:baz]
  • 您通过[someObject copy][someObject mutableCopy]获得了副本。
  • 您之前保留了它。