Objective c 在没有池警告的情况下自动释放?

Objective c 在没有池警告的情况下自动释放?,objective-c,Objective C,我有一个音频类,它对缓冲区进行采样,并使用NSNotification调用另一个类并发送数据(int) 我收到的警告每秒运行多次: class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() class __NSCFString autoreleased with no pool in place - just leaking - break o

我有一个音频类,它对缓冲区进行采样,并使用
NSNotification
调用另一个类并发送数据(int)

我收到的警告每秒运行多次:

class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool()

class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
这意味着什么? 是的,我在那门课上有
NSNumber
NSString
。 它们没有分配

我需要另一根线吗?
怎么了?

在应用程序的main()函数中是否使用了自动释放池?您是否在主线程以外的线程中使用自动释放实例(是的,我知道,您没有对它们进行alloc init,但是[NSNumber numberWith…]返回一个alloc init自动释放对象)?如果您最初没有设置自动释放池,或者您正在使用多个线程,则必须为每个线程创建一个单独的NSAutoreleasePool。

这意味着,对于运行代码的任何线程,在代码运行之前都没有设置任何自动释放池。对于基于AppKit或UIKit的应用程序,框架通常在主线程上为您管理一个应用程序,但是如果您使用其他线程,您仍然需要自己创建它们。对于不基于AppKit或UIKit的应用程序,在运行Objective-C代码时,您几乎总是需要确保周围有一个自动释放池。

当您在
objc\u autoreleasenool()上设置断点时会发生什么情况。
?堆栈显示了什么?如何在objc_autoreleasenool()上设置断点除了以这种方式创建对象外,还可以自动删除对象。例如,许多访问器实现都会自动删除对象。最安全的getter版本(我认为它是由合成访问器使用的)可以
返回[[ivar retain]autorelease]
。在没有自动释放池的情况下运行任意基于Foundation的代码通常是不安全的。是的。但我不会说最安全的getter返回保留自动释放。如果一个对象不存在,人们就不应该期望它的属性存在,因此这是一种“滥用”或“过度使用”安全性。这是苹果公司认可的做法,所以我很难称之为“滥用”。无论如何,这是很常见的,所以我不想编写遇到这种习语时出现错误行为的代码。无论如何,您不应该访问解除分配对象的属性,是吗?如果您正在使用ARC,而这种情况仍在发生,该怎么办?我有这个问题,但Xcode不允许我添加NSAutoreleasePool。@贾斯汀:
@autoreleasepool
指令应该可以工作。不是吗?是的,是的。谢谢你。