考虑这段代码:@implementationMyClass-(void)dealloc{NSLog(@"MyClassdealloc:%@",self);}@end@implementationAppDelegate__weakstaticMyClass*weakShared=nil;-(MyClass*)getMyClass{MyClass*tmpHolder=[[MyClassalloc]init];//PREPEND"__autoreleasing"weakShared=tmpHolder;returnweakShared;//ATTENTIONTOTHISLINE}-(void
我有一个CAEAGLLayer的运行循环方法,它使用GCD来序列化对共享ivar的访问。我目前的绘图代码是这样构造的:-(void)draw{dispatch_sync(serialDrawingQueue,^{@autoreleasepool{[selfdrawingStart];[spriteAdraw];[spriteBdraw];[selfdrawingEnd];}});}draw方法由CADisplayLink调用。当我使用GCDblock时,@autoreleasepool是否必需? 最佳答案 来自Appledocs:I
ARC中[[somethingretain]autorelease]的等价物是什么?我遇到一个问题,类DBRequest调用我的委托(delegate)来表示完成。然后,我的代表将DBRequest实例设置为nil,这是dealloc。但是当堆栈从我的委托(delegate)中弹出并跳回DBRequest时,它当然会崩溃。如果我不在ARC中,在我的委托(delegate)中我会简单地执行[[theDbRequestretain]autorelease]然后释放我对它的引用,这样它就可以存活足够长的时间直到下一个运行循环自动释放它。我应该在ARC中做什么? 最
我正在尝试完成这个谜题。__strong是所有Objective-C可保留对象指针(如NSObject、NSString等)的默认值。它是一个强引用。ARC在作用域末尾用-release平衡它。__unsafe_unretained等于旧方法。用于不保留可保留对象的弱指针。__weak与__unsafe_unretained类似,只是它是一个自动归零的弱引用,这意味着一旦引用的对象被释放,指针就会被设置为nil。这消除了悬空指针和EXC_BAD_ACCESS错误的危险。但是__autoreleasing到底有什么用呢?我很难找到关于何时需要使用此限定符的实际示例。我相信它仅适用于需要指
有人可以向我解释在以下示例代码块中使用__autoreleasing的目的吗?-(void)execute:(NSError*__autoreleasing*)error{//dostuff,possiblyassigningerrorifsomethingwentwrong}我删除了__autoreleasing并且一切似乎仍然可以正常编译/运行。我开始使用obj-cpostARC,所以我从来没有真正学习/理解所有那些双下划线thingamajigs。我读过ARCtransitionguide,但我不完全理解他们的NSError示例。 最佳答案
有人可以向我解释在以下示例代码块中使用__autoreleasing的目的吗?-(void)execute:(NSError*__autoreleasing*)error{//dostuff,possiblyassigningerrorifsomethingwentwrong}我删除了__autoreleasing并且一切似乎仍然可以正常编译/运行。我开始使用obj-cpostARC,所以我从来没有真正学习/理解所有那些双下划线thingamajigs。我读过ARCtransitionguide,但我不完全理解他们的NSError示例。 最佳答案
使用alloc或autorelease初始化程序是否更好(更快、更高效)。例如:-(NSString*)hello:(NSString*)name{return[[NSStringalloc]initWithFormat:@"Hello,%@",name];}或-(NSString*)hello:(NSString*)name{return[NSStringstringWithFormat:@"Hello,%@",name];//return[@"Hello,"stringByAppendingString:name];//evensimpler}我知道在大多数情况下,这里的性能应该无
使用alloc或autorelease初始化程序是否更好(更快、更高效)。例如:-(NSString*)hello:(NSString*)name{return[[NSStringalloc]initWithFormat:@"Hello,%@",name];}或-(NSString*)hello:(NSString*)name{return[NSStringstringWithFormat:@"Hello,%@",name];//return[@"Hello,"stringByAppendingString:name];//evensimpler}我知道在大多数情况下,这里的性能应该无