Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在没有自动释放池的情况下,如何使用NSBundle pathForResource?_Objective C_Autorelease_Nsbundle - Fatal编程技术网

Objective c 在没有自动释放池的情况下,如何使用NSBundle pathForResource?

Objective c 在没有自动释放池的情况下,如何使用NSBundle pathForResource?,objective-c,autorelease,nsbundle,Objective C,Autorelease,Nsbundle,此代码的非自动释放等价物是什么 NSString*nsFName=[[NSBundle mainBundle]路径资源:nsName 类型:nsExt inDirectory:nsPath] 没有。当你使用可可粉时: Cocoa始终希望有一个可用的自动释放池。如果池不可用,则不会释放自动释放的对象,并且应用程序会泄漏内存。如果在池不可用时发送自动释放消息,Cocoa将记录适当的错误消息 GUI应用程序设置过程的一部分是在主线程上建立一个应用程序;非GUI程序也需要创建一个 如果您正在创建自己的线

此代码的非自动释放等价物是什么

NSString*nsFName=[[NSBundle mainBundle]路径资源:nsName 类型:nsExt inDirectory:nsPath]


没有。当你使用可可粉时:

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

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

如果您正在创建自己的线程,您还可以为每个线程创建一个自动释放池:

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


根据您正在做的其他工作,您可能能够使用CoreFoundation。有一个CFType,
CFBundle
,它构建了
NSBundle
。它有一个函数
CbundlecopyresourceUrl()
,可以满足您的需要。如果你可以把所有的代码翻译成核心基础,那么你可以使用一个池来逃脱,尽管正如肯所说的,它并不是你认为的负担。每次使用
pathForResource:ofType:
时,您可能都会碰到磁盘。

没有。当你使用可可粉时:

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

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

如果您正在创建自己的线程,您还可以为每个线程创建一个自动释放池:

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


根据您正在做的其他工作,您可能能够使用CoreFoundation。有一个CFType,
CFBundle
,它构建了
NSBundle
。它有一个函数
CbundlecopyresourceUrl()
,可以满足您的需要。如果你可以把所有的代码翻译成核心基础,那么你可以使用一个池来逃脱,尽管正如肯所说的,它并不是你认为的负担。每次使用
pathForResource:ofType:
时,您可能都会碰到磁盘。

为什么没有一个自动释放池?Cocoa应该始终有一个顶级池。此代码在单独的线程上运行。那么,您应该设置自己的池。在我的例子中,这些线程不会持续很长时间,并且可能会大量产生……在这种情况下,为每个线程创建自动释放池不是很浪费吗?那么,您可能应该寻找显式线程使用的替代方案;在这一点上,它们是可可的最后手段。看一看这座城市;听起来使用GCD队列会满足您的需要。为什么您没有一个自动释放池?Cocoa应该始终有一个顶级池。此代码在单独的线程上运行。那么,您应该设置自己的池。在我的例子中,这些线程不会持续很长时间,并且可能会大量产生……在这种情况下,为每个线程创建自动释放池不是很浪费吗?那么,您可能应该寻找显式线程使用的替代方案;在这一点上,它们是可可的最后手段。看一看这座城市;听起来使用GCD队列可以满足您的需要。+1我要补充的是,对设置和拆除自动释放池的“费用”的担忧是错误的。现在使用
@autoreleasepool
,它们不仅便宜,而且更便宜。成本肯定比
-[NSBundle pathForResource:ofType:://code>还要低,更不用说“大量”创建和分解线程了(!)。+1,我要补充的是,关于设置和分解自动释放池的“费用”的担忧是错误的。现在使用
@autoreleasepool
,它们不仅便宜,而且更便宜。即使是
-[NSBundle-pathForResource:ofType:://code>的成本也肯定比这要低,更不用说“大量”创建和分解线程了(!)。