我正在尝试将我的旧项目转换为ARC。我有一个创建UUID的函数,但显然这在使用ARC时不再受支持:NSString*uuid=nil;CFUUIDReftheUUID=CFUUIDCreate(kCFAllocatorDefault);if(theUUID){uuid=NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault,theUUID));//[uuidautorelease];CFRelease(theUUID);}我收到编译器错误(尝试转换时):“NSMakeCollectable”不可用:在自动引用计数模式下不可用。所
是否可以在没有来自self的__weak对象的情况下在block中传递[selfanyFunction]?例如,这是来自系统框架的有效代码:[UIViewanimateWithDuration:0.8animations:^{//DoanimationStuff}completion:^(BOOLfinished){[selfanyFunction];}];您可以在完成block中传递[selfanyFunction]而不会发出警告。但是,如果您使用完成block编写自己的方法,则会出现以下警告:在此block中强烈捕获“self”可能会导致保留周期。可行的解决方案非常简单(iOS5+
我在纯iOS5/ARC环境中工作,所以我可以根据需要使用__weak引用。在很多情况下,我确实在一个block中引用了ivars,最值得注意的是,移动View的动画block,它们是我的ViewController类的属性。我的问题:Inthemosttrivialuseofivarsinablock,amIcreatingareferencecycle?DoIneedtousethe__weakself/strongselftechniqueeverytimeIwriteablockthatmanipulatesinstancevariablesofthecontainingobje
我正在使用ARC(不,这不是NDA)。我在我的界面中声明了我的ivariditemDelegate;然后我声明属性:@property(nonatomic,weak)iditemDelegate;(由于ARC而使用weak而不是assign)在我的实现文件中,我简单地综合了它:@synthesizeitemDelegate;但是,我收到错误:"Existingivar'ItemDelegate'for_weakproperty'itemDelegate'mustbe_weak".谁知道怎么回事?感谢您的帮助。ARC-自动引用计数 最佳答案
我刚刚使用Xcode的自动重构将一个旧项目转换为ARC。@property(nonatomic,retain)NSMutableArray*cards;被替换为:@property(nonatomic)NSMutableArray*cards;这是有道理的,因为我读到的是“强”是默认状态。但是,以下行在标题中给我错误:self.cards=[[NSMutableArrayalloc]initWithCapacity:54];通过在原来保留的位置添加strong来解决错误:@property(nonatomic,strong)NSMutableArray*cards;但是...如果我需要
自从ARC首次宣布它是一个编译时的东西并且将向后兼容iOS4以来,我已经阅读和听到。我已经使用Xcode4.2的自动重构成功地将我的项目重构为ARC,并且当针对iOS5.0SDK编译,它工作正常。但是,如果我尝试针对我的iOS4.2SDK进行编译,它会在链接时失败,缺少以下符号:_objc_retainAutoreleaseReturnValue_objc_autoreleaseReturnValue_objc_storeStrong_objc_retain_objc_release_objc_retainAutoreleasedReturnValue我检查过,这些符号在5.0中存在,
我有点困惑。我读过的所有地方都建议在使用ARC时,你仍然需要释放核心基础对象,这是有道理的,ARC不管理它们。但是,我有一个方法使用了一些CF方法/对象,我在这些方法/对象上使用了CFRelease,但随后导致应用程序崩溃。取消注释我的CFRelease解决了这个问题,但我假设我有内存泄漏?有人可以解释一下哪些东西需要发布,哪些不需要,或者这段代码还有什么问题吗?+(NSString*)fileExtensionForMimeType:(NSString*)type{CFStringRefmimeType=(__bridgeCFStringRef)type;CFStringRefuti
方法一:@interfaceMyController:UIViewController{UILabel*myText;}@property(nonatomic,strong)UILabel*myText;方法二:@interfaceMyController:UIViewController@property(nonatomic,strong)UILabel*myText;方法三:@interfaceMyController:UIViewController{UILabel*myText;}我已经阅读了一些谈论此类内容的文章,但我仍然没有真正意识到我必须采用哪种方法。我还发现有人说方法1
多年来,我一直在遵循一种名为Target-Action的伟大模式,它是这样的:一个对象在调用的时候调用指定目标对象上的指定选择器。这在您需要对任意方法进行简单回调的许多不同情况下非常有用。这是一个例子:-(void)itemLoaded{[specifiedReceiverperformSelector:specifiedSelector];}在ARC下,现在发现做这样的事情突然变得很危险。Xcode抛出如下警告:PerformSelectormaycausealeakbecauseitsselectorisunknown当然,选择器是未知的,因为作为Target-Action设计
SOhere上也有类似的问题,但是我只想澄清一些在那里没有完全解释的事情。我理解所有代表和导出——实际上任何对“父”对象的引用,作为一个好公民并考虑一下对象图——应该将弱引用归零。由于在引用对象的保留计数达到零时将弱指针归零的性质自动降至零,这是否意味着现在不需要在viewDidUnload中将IBOutlets设置为零?所以,如果我这样声明我的导出:@property(nonatomic,weak)IBOutletUILabel*myLabel;下面的代码有没有效果?-(void)viewDidUnload{self.myLabel=nil;[superviewDidUnload];