【问题标题】:Do you need to release NSData?你需要发布 NSData 吗?
【发布时间】:2011-04-18 07:02:37
【问题描述】:
-(void) func1: (NSData*) somedata
{
    //Processing somedata ....

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

【问题讨论】:

  • 在这种情况下无法知道是否需要发布。
  • 您需要提供更多信息。从您的代码 sn-p 中,无法知道 somedata 的所有权如何/何时/是否发生。考虑编辑您的问题并发布您获得NSData * 实例的代码以及如何将其传递给-func1:

标签: iphone release nsdata


【解决方案1】:

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

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

假设:

  • func1 在同一个线程上运行

【讨论】:

  • Somedata 的原始所有者如何知道何时不需要它。 SomeData 将传递给另一个函数或另一个对象。
  • 如果 someData 来自一些复杂的委托函数并作为回调函数接收怎么办。没有办法将 [somedata release] 放在那些源自或预期的委托函数中。
【解决方案2】:

在这种情况下,不,您不应该释放您的对象。你不是“所有者”。根据经验,只有在以下情况下才需要释放对象:

  • 您通过[MyClass alloc] 分配它,如[[MyClass alloc] init][[MyClass alloc] initWithFoo:foo bar:baz]
  • 您通过[someObject copy][someObject mutableCopy] 获得了一份副本。
  • 您以前保留过它。

【讨论】:

    【解决方案3】:

    如果你在这种情况下保留它,你应该考虑释放它。但我不确定,因为您的问题没有提供任何想法是否需要发布。但一般来说,如果你拥有它,你会release 对象。

    【讨论】:

    • 我可能同意这一点,因为您掌握了一些数据。原所有者不知道您是否完成了 someData。只有你知道 someData 已经完成并且不需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多