草庐IT

autorelease

全部标签

ios - autorelease与runloop和thread的关系?

我有一个关于自动释放的问题,现在我有下面的代码:intmain(intargc,char*argv[]){@autoreleasepool{returnUIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegateclass]));}}文档在@autoreleasepool{}的末尾说,标记为自动释放的对象将收到释放消息。但是UIApplicationMain永远不会返回,这意味着流程永远不会到达@autoreleasepool的末尾,然后标记为autorelease的对象将永远不会被释放,直到应用程序死亡。没有autore

objective-c - autorelease 在自动引用计数模式下不可用

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Imgettingthiserror‘autorelease’isunavailable:notavailableinautomaticreferencecountingmode我正在通过一本名为Objective-Cfundamentals的书学习Objective-C,该书于2011年出版。它正在构建一个简单的应用程序来介绍iOS概念并教授Objective-C语言。自本书出版以来,平台或语言似乎发生了一些变化。当我尝试从书中构建代码时(下面摘录了关键段落),我遇到了这个错误:autoreleaseisu

objective-c - iOS autoreleased 没有适当的池 - 但我正在创建 ARP!

因此,我正在使用[NSThreaddetachNewThreadSelector]生成一个新线程,并且我在控制台中收到“autoreleasedwithnopoolinplace”错误。我知道如果您未能创建自动释放池,就会发生这种情况,但事实是,我正在创建一个。我在同一个应用程序的其他部分使用了类似的代码,但没有出现这些错误。相关代码如下:-(void)startThread:(NSString*)strURL{//startnewthreadtoloadimageNSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];[NSThre

iphone - "Object 0x84be00 of class NSCFString autoreleased with no pool in place - just leaking"- 但在应用程序的第一行!

在我的iPhone应用程序中,在应用程序开始时,在调用任何代码之前,我在控制台中收到三个奇怪的警告:***__NSAutoreleaseNoPool():Object0x84be00ofclassNSCFStringautoreleasedwithnopoolinplace-justleaking***__NSAutoreleaseNoPool():Object0x84b000ofclassNSCFStringautoreleasedwithnopoolinplace-justleaking***__NSAutoreleaseNoPool():Object0x849c00ofclass

ios - 'autorelease is unavailable' 错误和 'ARC forbids explicit message send of autorelease' 错误

我有一个运行良好的应用程序。然后我尝试将导航Controller嵌入到tabbarcontroller中,接下来我知道我在编译过程中开始遇到这些错误。有人知道为什么会这样吗?某些设置是否被意外取消或选中?谢谢,亚历克斯 最佳答案 似乎您以前的工作代码没有使用ARC,现在您试图将它嵌入到使用ARC的代码中......使用“编辑->转换-​​>转换为Object-CARC”重构您的代码 关于ios-'autoreleaseisunavailable'错误和'ARCforbidsexplici

objective-c - iOS __autoreleasing 常量错误

所以我像往常一样将一个指向NSError对象的指针传递给一个方法。它曾经很简单:-(BOOL)foo:(NSString*)stringerror:(NSError**)error但是对于ARC,现在是:-(BOOL)foo:(NSString*)stringerror:(NSError*__autoreleasing*)error所以如果我有一个变量:NSError*error=nil;并尝试:[foo:@"astring"error:&error];我收到错误:Sending'NSErrorconst__strong*'toparameteroftype'NSError*__aut

ios - 为什么仅在第一次返回 __strong 和 __autoreleasing 变量后才会产生不同的对象生命周期?

考虑这段代码:@implementationMyClass-(void)dealloc{NSLog(@"MyClassdealloc:%@",self);}@end@implementationAppDelegate__weakstaticMyClass*weakShared=nil;-(MyClass*)getMyClass{MyClass*tmpHolder=[[MyClassalloc]init];//PREPEND"__autoreleasing"weakShared=tmpHolder;returnweakShared;//ATTENTIONTOTHISLINE}-(void

ios - 是否需要在GCD中的ARC下创建一个autorelease pool?

我有一个CAEAGLLayer的运行循环方法,它使用GCD来序列化对共享ivar的访问。我目前的绘图代码是这样构造的:-(void)draw{dispatch_sync(serialDrawingQueue,^{@autoreleasepool{[selfdrawingStart];[spriteAdraw];[spriteBdraw];[selfdrawingEnd];}});}draw方法由CADisplayLink调用。当我使用GCDblock时,@autoreleasepool是否必需? 最佳答案 来自Appledocs:I

iphone - ARC 中的 '[[something retain] autorelease]' 是什么?

ARC中[[somethingretain]autorelease]的等价物是什么?我遇到一个问题,类DBRequest调用我的委托(delegate)来表示完成。然后,我的代表将DBRequest实例设置为nil,这是dealloc。但是当堆栈从我的委托(delegate)中弹出并跳回DBRequest时,它当然会崩溃。如果我不在ARC中,在我的委托(delegate)中我会简单地执行[[theDbRequestretain]autorelease]然后释放我对它的引用,这样它就可以存活足够长的时间直到下一个运行循环自动释放它。我应该在ARC中做什么? 最

objective-c - 在什么情况下,我们需要在 ARC 下编写 __autoreleasing 所有权限定符?

我正在尝试完成这个谜题。__strong是所有Objective-C可保留对象指针(如NSObject、NSString等)的默认值。它是一个强引用。ARC在作用域末尾用-release平衡它。__unsafe_unretained等于旧方法。用于不保留可保留对象的弱指针。__weak与__unsafe_unretained类似,只是它是一个自动归零的弱引用,这意味着一旦引用的对象被释放,指针就会被设置为nil。这消除了悬空指针和EXC_BAD_ACCESS错误的危险。但是__autoreleasing到底有什么用呢?我很难找到关于何时需要使用此限定符的实际示例。我相信它仅适用于需要指