Iphone 是否可以将对象添加到特定的自动释放池?

Iphone 是否可以将对象添加到特定的自动释放池?,iphone,cocoa-touch,uikit,autorelease,Iphone,Cocoa Touch,Uikit,Autorelease,在文档中有一个addObject:NSAutoreleasePool的方法 我想了想: NSString*myString=[[NSString alloc]initWithCString:“这行吗?”; [thePool addObject:myString]; [anotherPool addObject:myString] 可能吗?我经常读到,我只能将对象添加到自动释放池堆栈的最顶端。您所做的是可能的,但可能会在运行时导致异常,因为myString在解除分配后将发送一条-release消息

在文档中有一个addObject:NSAutoreleasePool的方法

我想了想:

NSString*myString=[[NSString alloc]initWithCString:“这行吗?”; [thePool addObject:myString]; [anotherPool addObject:myString]


可能吗?我经常读到,我只能将对象添加到自动释放池堆栈的最顶端。

您所做的是可能的,但可能会在运行时导致异常,因为myString在解除分配后将发送一条
-release
消息(假设最后剩余的引用由第一个池进行)。通常,正如
-[NSAutoreleasePool addObject:
所述,您不应该手动将对象添加到自动释放池中,而是通过对该对象调用
-autorelease
。这将把对象放在当前线程的活动自动释放池中(每个线程都有自己的自动释放池)。

您所做的是可能的,但可能会在运行时导致异常,因为在解除分配后myString将发送一条
-release
消息(假设最后剩余的引用由第一个池进行)。通常,正如
-[NSAutoreleasePool addObject:
所述,您不应该手动将对象添加到自动释放池中,而是通过对该对象调用
-autorelease
。这会将对象放入当前线程的活动自动释放池中(每个线程都有自己的自动释放池)。

是的,可以。但你永远不应该。绝对没有理由这样做。

是的,你可以。但你永远不应该。绝对没有理由这么做。

我现在有点困惑,因为苹果的这一点:

当对象被自动释放时 是,当发送对象时 自动释放消息或当它是 作为参数传递给 addObject:类方法它总是 放在顶部的自动释放池中 一堆的


另一方面,他们在NSAutoreleasePool类引用中没有提到它。所以我猜,即使我在一个特定的对象上调用addObject,它也会进入自动释放池堆栈顶部的对象。事实上我得试试;)

我现在有点困惑,因为来自苹果的这句话:

当对象被自动释放时 是,当发送对象时 自动释放消息或当它是 作为参数传递给 addObject:类方法它总是 放在顶部的自动释放池中 一堆的


另一方面,他们在NSAutoreleasePool类引用中没有提到它。所以我猜,即使我在一个特定的对象上调用addObject,它也会进入自动释放池堆栈顶部的对象。事实上我得试试;)

您似乎有许多与内存管理相关的问题。我认为仔细阅读内存管理编程指南()会对您大有好处。你所有问题的答案都在那里。祝你好运。我确实读了两遍。但不幸的是,我不理解他们试图解释它们的方式。似乎你有很多与内存管理相关的问题。我认为仔细阅读内存管理编程指南()会对您大有好处。你所有问题的答案都在那里。祝你好运。我确实读了两遍。但不幸的是,我不理解他们试图解释它们的方式。它说的是“类方法”,而不是实例方法。它说的是“类方法”,而不是实例方法。