【发布时间】:2012-12-12 05:06:17
【问题描述】:
我知道alloc 和retain 会增加对象的引用计数。是否有任何其他不同的方法可以实际增加引用计数?以及何时/如何调用dealloc?
【问题讨论】:
标签: objective-c ios ios5 memory-management dealloc
我知道alloc 和retain 会增加对象的引用计数。是否有任何其他不同的方法可以实际增加引用计数?以及何时/如何调用dealloc?
【问题讨论】:
标签: objective-c ios ios5 memory-management dealloc
alloc 分配一个保留计数为 1 的对象。new 开头的方法也返回一个保留计数为 1 的对象。retain 将计数增加 1。release 和 autorelease(在运行循环结束时)将其减 1。copy 开头)也会创建保留计数为 1 的副本。dealloc 在对象的保留计数降至 0 时被调用。
PS。如果您还不知道,请考虑使用Automatic Reference Counting (ARC)。
【讨论】:
mutableCopy,2. 不是“在运行循环的末尾”(这甚至意味着什么?),而是在封闭的自动释放池的末尾。虽然 +1。
-retainCount 是“保留计数”。 “你不应该依赖-retainCount”意味着“你不应该依赖保留计数”
有了这些,保留计数就会增加。
new,不过可以看成alloc+init。
保留
复制创建新对象,保留计数=1
mutableCopy 使用保留计数=1 创建新对象
dealloc 在保留计数达到 0 时自动调用。
【讨论】:
copy 和 mutableCopy 创建保留计数为 1 的新对象?它们不会增加接收者的保留计数。
alloc、new、retain、copy 或mutableCopy 开头的方法会返回一个保留实例。调用什么对象无关紧要。