草庐IT

ARC下AutoReleasePool的误区

全部标签

ios - 为什么 ARC 的 objc_autoreleaseReturnValue 的实现对于 x86_64 和 ARM 不同?

阅读MikeAsh的精彩博文后"FridayQ&A2014-05-09:WhenanAutoreleaseIsn't"在ARC上,我决定检查ARC为加速保留/释放过程而应用的优化细节。我所指的技巧称为“快速自动释放”,其中调用者和被调用者合作将返回的对象排除在自动释放池之外。这在以下情况下效果最好:-(id)myMethod{idobj=[MYClassnew];return[objautorelease];}-(void)mainMethod{obj=[[selfmyMethod]retain];//Dosomethingwithobj[objrelease];}可以通过完全跳过自动

iphone - ASIHTTPRequest/ASIFormDataRequest - 在 ARC 下的 block 中引用请求对象

非常类似于thisquestion,我正在尝试将使用ASIHTTPRequest&ASIFormDataRequest的项目转换为ARC。在我的ViewController类中,我经常在完成block中引用和使用request对象的属性(查看响应代码、响应数据等):__blockASIFormDataRequest*request=[ASIFormDataRequestrequestWithURL:[NSURLURLWithString:SOME_URL]];[requestsetCompletionBlock:^{if([requestresponseStatusCode]==200

ios - 在 ARC 下的 Objective-C 上,当归零弱引用变为 nil 时如何得到通知?

是否有一种机制可以让对象知道归零弱引用变为nil?比如我有一个属性@property(nonatomic,weak)MyClass*theObject;当对象解除分配并且属性变为零时,我想得到通知。但是怎么办?归零弱引用系统是否在对象消失时使用setter将属性设置为nil? 最佳答案 运行时只是将弱变量_theObect设置为nil,不会调用自定义setter。您可以做什么(如果您真的需要通知):定义一个本地“watcher”类并在该类中实现dealloc,创建一个观察者对象并将其设置为_theObject的“关联对象”。当_th

iphone - NSMakeCollectable 和 ARC 不起作用

我正在尝试将我的旧项目转换为ARC。我有一个创建UUID的函数,但显然这在使用ARC时不再受支持:NSString*uuid=nil;CFUUIDReftheUUID=CFUUIDCreate(kCFAllocatorDefault);if(theUUID){uuid=NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault,theUUID));//[uuidautorelease];CFRelease(theUUID);}我收到编译器错误(尝试转换时):“NSMakeCollectable”不可用:在自动引用计数模式下不可用。所

iphone - 可以在没有 __weak 对象的 block 中传递 [self anyFunction] (iOS 5 + ARC)

是否可以在没有来自self的__weak对象的情况下在block中传递[selfanyFunction]?例如,这是来自系统框架的有效代码:[UIViewanimateWithDuration:0.8animations:^{//DoanimationStuff}completion:^(BOOLfinished){[selfanyFunction];}];您可以在完成block中传递[selfanyFunction]而不会发出警告。但是,如果您使用完成block编写自己的方法,则会出现以下警告:在此block中强烈捕获“self”可能会导致保留周期。可行的解决方案非常简单(iOS5+

ios - 现代 iOS 8 NSOperation 使用仍然需要@autoreleasepool 吗?

我已通读ConcurrencyProgrammingGuide在指南中,文本指出GCD调度队列定义了它们自己的@autoreleasepool池,并提到仍然建议在每个调度级别定义一个池,但对于NSOperation什么也没说,Apple提供的示例代码也没有显示@autoreleasepool结构的用法。在NSOperation的上下文中,@autoreleasepool唯一被模糊提及的地方是在RevisionHistory中,2012-07-17-Removedobsoleteinformationaboutautoreleasepoolusagewithoperations.查看在线

objective-c - ARC, block 中的ivars和通过捕获的 self 引用循环

我在纯iOS5/ARC环境中工作,所以我可以根据需要使用__weak引用。在很多情况下,我确实在一个block中引用了ivars,最值得注意的是,移动View的动画block,它们是我的ViewController类的属性。我的问题:Inthemosttrivialuseofivarsinablock,amIcreatingareferencecycle?DoIneedtousethe__weakself/strongselftechniqueeverytimeIwriteablockthatmanipulatesinstancevariablesofthecontainingobje

iphone - 声明委托(delegate) ivar 时出现 ARC 错误

我正在使用ARC(不,这不是NDA)。我在我的界面中声明了我的ivariditemDelegate;然后我声明属性:@property(nonatomic,weak)iditemDelegate;(由于ARC而使用weak而不是assign)在我的实现文件中,我简单地综合了它:@synthesizeitemDelegate;但是,我收到错误:"Existingivar'ItemDelegate'for_weakproperty'itemDelegate'mustbe_weak".谁知道怎么回事?感谢您的帮助。ARC-自动引用计数 最佳答案

ios - 自动 ARC 转换后 : Assigning retained object to unsafe property; object will be released after assignment

我刚刚使用Xcode的自动重构将一个旧项目转换为ARC。@property(nonatomic,retain)NSMutableArray*cards;被替换为:@property(nonatomic)NSMutableArray*cards;这是有道理的,因为我读到的是“强”是默认状态。但是,以下行在标题中给我错误:self.cards=[[NSMutableArrayalloc]initWithCapacity:54];通过在原来保留的位置添加strong来解决错误:@property(nonatomic,strong)NSMutableArray*cards;但是...如果我需要

iphone - iOS 4 真的支持 ARC 吗? iOS 4.2 SDK 在链接时缺少与 ARC 相关的符号

自从ARC首次宣布它是一个编译时的东西并且将向后兼容iOS4以来,我已经阅读和听到。我已经使用Xcode4.2的自动重构成功地将我的项目重构为ARC,并且当针对iOS5.0SDK编译,它工作正常。但是,如果我尝试针对我的iOS4.2SDK进行编译,它会在链接时失败,缺少以下符号:_objc_retainAutoreleaseReturnValue_objc_autoreleaseReturnValue_objc_storeStrong_objc_retain_objc_release_objc_retainAutoreleasedReturnValue我检查过,这些符号在5.0中存在,