【问题标题】:What's the actual impact "release" has in objective-c?“发布”对objective-c的实际影响是什么?
【发布时间】:2015-08-05 03:49:30
【问题描述】:

我正在研究objective-c中的内存管理。至于下面的代码:

CFMutableArrayRef cfObject = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
id obj = CFBridgingRelease(cfObject);

表示代码执行后,cfObject指向的对象被释放,但cfObject仍然指向它,所以仍然可以照常使用。所以我想知道释放功能对我在对象释放后仍然可以使用它有什么影响?

【问题讨论】:

    标签: objective-c memory-management automatic-ref-counting


    【解决方案1】:

    CFBridgingRelease 是一种完成 CF 对象内存管理的方法,同时将对象在其生命周期的剩余时间内交给 NSObject 内存管理。因此,这个对象在 CF 世界中被释放,但它被分配给obj(在 ARC 下)保留。因此它仍然存在,你仍然可以通过cfObject 使用它(但你不应该,因为你已经明确表示你已经在 CF 世界中使用它了)。

    【讨论】:

    • 谢谢!但是我想知道我是否将cfObject的类型替换为一个简单的NSObject或只是id,然后我发布它之后我可以使用它吗?
    • 你尝试的时候发生了什么?说真的,我回答了你问的问题。你打算永远把它偷走吗,因为这不是我感兴趣的游戏。
    • 非常抱歉当时我的 mac 不可用所以我只是问你。在我尝试之后,我发现如果我尝试访问释放的对象,程序会崩溃。我想我在这个问题上遇到了麻烦,因为我不清楚 Foundation 和 Core Foundation 之间的区别。
    • 我给了你一个向你解释它的链接。阅读它。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2011-11-27
    • 2011-09-15
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多