实际上,如果您使用名称中带有“new”、“create”、“alloc”或“copy”的方法,那么您有责任释放返回给您的对象。但是:为什么这些方法会调用 -autorelease?这不会导致“过度释放”对象吗?
假设我从这样的方法中获取该对象,然后我调用 -release 。该对象在 Autorelease Pool 中,并且引用计数为 0。当 Autorelease Pool 被释放时,接下来会发生什么?
实际上,如果您使用名称中带有“new”、“create”、“alloc”或“copy”的方法,那么您有责任释放返回给您的对象。但是:为什么这些方法会调用 -autorelease?这不会导致“过度释放”对象吗?
假设我从这样的方法中获取该对象,然后我调用 -release 。该对象在 Autorelease Pool 中,并且引用计数为 0。当 Autorelease Pool 被释放时,接下来会发生什么?
便利构造函数的名称中没有任何这些词(例如,[NSMutableArray 数组]),因此按照惯例,它们返回自动释放的对象。确实具有表明它们返回保留对象的单词之一的方法不会调用自动释放,因此您问题的部分前提是不正确的。
如果您自己释放从便利构造函数返回的对象(没有显式保留它们),那么它们将被过度释放,您的应用程序可能会崩溃。
对不起@所有人!我想,我在明亮的阳光下坐得太久了。当然,这些便捷方法拥有它们创建的对象的所有权,因为它们在开始时的某个时间点调用 -alloc。而且-alloc 方法本身不会调用-alloc,因为它已经是-alloc。就是这样。
想过删掉这个问题,但也许其他人也像我一样在阳光下坐了太久。所以这可能会有所帮助。