我刚刚将我的应用程序转换为了ARC。由于Xcode提供的重构工具,转换部分成功。唯一不起作用的部分是一个奇怪的错误。
我使用了方法交换(method_exchangeImplementations),这样就可以调用myInitWithFrame代码而不是UIView的initWithFrame。重构过程在myInitWithFrame方法声明处引发了错误,因此我在方法声明之后添加了__attribute__ ((objc_method_family(init)))。现在,在iOS 6.0及以上版本上所有功能都完美地运行,但在iOS 5.0上(我想要支持的最低iOS版本)它不起作用。我收到了EXC_BAD_ACCESS(code=1,address=0X28)的错误。每次运行时都会出现相同的内存地址。
我有一个UIWebView,调用它的:
[[UIWebView alloc] initWithFrame:webViewFrame];
在myInitWithFrame完成初始化之后,它返回self,然后崩溃了。 在线程跟踪中,它说它在苹果的代码中(该方法被灰掉)崩溃了,在下面看到了[UIWebView retain]方法。
Thread 1, Queue : com.apple.main-thread
#0 0x3515a7d2 in -[UIWebView retain] ()
#1 0x316ddef4 in objc_retain ()
#2 0x0011528c in -[UIView(style) myInitWithFrame:]
非常抱歉,线程跟踪格式不够好,我没有足够的声望来发布图像。
同样的代码为什么在iOS 6.0上运行良好,但在iOS 5.0上却不能运行呢?