2011-04-18 116 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]獲得了副本。
  • 您之前保留了它。