2012-09-17 105 views
7

我有一个Xcode 3.2目标项目。我想将此项目转换为ARC以改善将非ARC项目转换为ARC

的性能。我正在执行这些步骤。

编辑 - > Refactor->转换成Objective C的ARC

我已经得到了一些.mm文件到我禁用使用-fno-objc弧的弧。但即使在

这我收到很多错误(ARC问题)。用于例如主要是在自我= [超级INIT]呼叫时,

误差不能分配给自在init家族的方法之外。可以

有人告诉我我遵循正确的步骤吗?

回答

15

我是想一谟转换为ARC和从旧创建一个新的,包括文件后 - 我得到的问题之一是

无法分配到“自我”的外方法在init家庭

的选择名称必须以init开始 - 不仅如此 - 在我的情况初始化选择是:

-(id)initwithPage:(unsigned)pageNum {...} 

注意小'w'。

我已经把它改为:

-(id)initWithPage:(unsigned)pageNum {...} 

通知资本 'W'!

我的问题解决了。

我希望这可以帮助别人。

+1

即使我也在我的XCode中观察过它。 – Raj

+1

附加说明:在LLVM的文档中提到了这一点(虽然非常巧妙):“选择器在某个选择器族中,如果忽略任何前导下划线,选择器的第一个组件完全由方法族的名称组成,或者它以名称开头,后面跟着字符**,而不是小写字母。**“ – Xono

+0

并且不要忘记 - (id)返回值! – JeanNicolas

1

雷Wenderlich的教程有一个不错的ARC-转换两部分教程采取哪些应详细正确的步骤:Part 1Part 2

在您遇到的描述几乎总结起来误差的条款:您正在使用不符合the standard for init methods的方法分配到self。我不能说这是否是合法的ARC之前,但它现在已经不复存在了。为了解决这个问题,可以将它作为一个init方法(遵循初始化方法,将一个超级初始化方法调用为self,初始化任何值并返回self),或者将其赋值给self。对于其他错误,请发表任何您遇到问题的帖子(其中很多内容都在Ray的教程中介绍),我们会尽我们所能。

+1

这是完全合法的,但问题是:在什么情况下,你想要在'init'方法外分配'self'? – nielsbot

+1

他的方法完全可能具有init风格的行为,但是不会返回init-ed对象(即调用'obj = [Obj alloc];''[obj initWithData];'initWithData返回void)。因为init方法必须返回一个指针,所以它会在ARC之前运行良好,但是在转换时会导致大量问题。幸运的是,如果就是这样,它应该只是更新声明的问题。 – Xono