【问题标题】:Does NSFileHandle -readDataOfLength: return autoreleased NSData?NSFileHandle -readDataOfLength: 返回自动释放的 NSData 吗?
【发布时间】:2011-08-26 22:49:35
【问题描述】:

当我在NSFileHandle 实例上调用readDataOfLength: 时,是否需要释放返回的NSData?目前我不是,但我想摆脱这个令人烦恼的疑问。

【问题讨论】:

    标签: objective-c cocoa nsdata nsfilehandle


    【解决方案1】:

    不。 Cocoa 的memory management rules 说您只拥有(因此需要释放)从名称包含“new”、“alloc”、“保留”或“复制”(NARC)。由于该方法不包含这些,因此您知道不需要释放它。

    【讨论】:

    • 谢谢。 NARC 是一个很好的助记符。现在我可以晚上睡觉了。
    • 或者,使用 NARColepsy,您可以在白天睡觉。
    • NARColeptics 可能会被误认为是 NSZombies。我想有一个关于那个坡的短篇小说......
    【解决方案2】:

    在 Objective C 库中非常一致地观察到的标准是,以“alloc”或“copy”开头的方法(以及,我在想,一些其他晦涩的动词)返回一个保留对象,而其他一切都返回一个自动释放的对象。

    任何异常都应在规范中详细记录。

    【讨论】:

    • 这个晦涩的词是“新”,几乎没有人使用(这可能会随着人们采用 ARC 而改变……),另一个完全不晦涩的词是retain。请注意,仅仅因为一个方法不返回一个拥有的引用并不意味着它返回一个自动释放的对象。
    • 如果一个方法没有返回一个自动释放的对象(并且不是提到的异常之一)那么它必须被记录。 (这适用于用户编写的方法以及 Objective C 库。)
    • 如前所述,不真实。我想你的意思是“如果一个方法返回一个拥有引用(并且不遵循命名模式),那么它必须被记录下来”。那是真实的。方法可以返回对象而不返回所有权或自动释放对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多