【发布时间】:2012-09-14 18:50:09
【问题描述】:
我有以下形式的 ARC 代码:
NSMutableData* someData = [NSMutableData dataWithLength:123];
...
CTRunGetGlyphs(run, CGRangeMake(0, 0), someData.mutableBytes);
...
const CGGlyph *glyphs = [someData mutableBytes];
...
...后面是从glyphs 读取内存但对someData 不执行任何操作的代码,它不再被引用。请注意,CGGlyph 不是对象类型,而是无符号整数。
我是否必须担心someData 中的内存可能会在我完成glyphs(实际上只是指向内部someData)之前被释放?
所有这些代码都在同一个范围内(即单个选择器),glyphs 和 someData 都同时超出范围。
PS 在这个问题的早期草稿中,我提到了“垃圾收集”,它并不真正适用于我的项目。这就是为什么下面的一些答案将其与 ARC 下发生的事情同等对待。
【问题讨论】:
-
您实际上是否在启用 GC 的情况下运行?您必须竭尽全力才能将其打开,并且已(预先)弃用。或者你说的是不是 GC 的 ARC?
-
乔希问了一个好问题。 GC != ARC。
-
@JoshCaswell 这不仅仅是预先弃用,而是完全正式弃用。请参阅常见问题解答的最底部developer.apple.com/library/mac/#releasenotes/ObjectiveC/…
-
谢谢,@Tommy。我没有看到那个注释,我不记得 Lion 是否已经弃用它,所以我很保守。
标签: objective-c memory-management garbage-collection automatic-ref-counting