0

此代码的非自动释放等效项是什么?

NSString *nsFName = [[NSBundle mainBundle] pathForResource:nsName ofType:nsExt inDirectory:nsPath];

4

1 回答 1

3

没有一个。当您使用 Cocoa 时,您必须有一个适当的池

Cocoa 总是希望有一个可用的自动释放池。如果池不可用,则不会释放自动释放的对象,并且您的应用程序会泄漏内存。如果您在池不可用时发送自动释放消息,Cocoa 会记录适当的错误消息。

GUI 应用程序设置过程的一部分是在主线程上建立一个;非 GUI 程序也需要创建一个。

如果您正在创建自己的线程,则还需要为每个线程创建和管理一个自动释放池:

在 Objective-C 框架中链接的应用程序通常必须在其每个线程中创建至少一个自动释放池。如果应用程序使用托管模型(应用程序处理对象的保留和释放),则自动释放池会捕获从该线程自动释放的任何对象。

根据您正在做的其他事情,您也许可以使用 CoreFoundation。有一个 CFType, CFBundle, 是在其NSBundle上构建的。它有一个功能CFBundleCopyResourceURL()可以满足你的需要。如果您可以将所有代码翻译到 Core Foundation,那么您可以使用池来逃脱,尽管 - 正如 Ken 所说 - 这确实不是您认为的负担。pathForResource:ofType:无论如何,您可能每次使用时都会碰到磁盘。

于 2012-05-28T04:51:21.950 回答