我剛剛將我的應用程序切換到ARC。由於Xcode提供的重構工具,轉換部分成功。一部分不起作用是一個奇怪的錯誤。iOS - EXC_BAD_ACCESS code = 1 UIWebView崩潰後(方法swizzling)初始化
我使用方法swizzling(method_exchangeImplementations),以便調用UIView的initWithFrame而不是調用myInitWithFrame代碼。重構過程在myInitWithFrame的方法聲明處拋出錯誤,所以我在方法聲明之後添加了__ 屬性 __((objc_method_family(init)))。現在,對於iOS 6.0及更高版本,這一切都完美無瑕,但在iOS 5.0(我希望支持的最低iOS)上它不起作用。我得到一個EXC_BAD_ACCESS(代碼= 1,地址= 0X28)。在每次運行中,都會出現完全相同的內存地址。
我有一個調用它的一個UIWebView:
[[UIWebView alloc] initWithFrame:webViewFrame];
的myInitWithFrame做它的初始化之後,返回自我,然後崩潰。 在線程追蹤上,它表示它在[UIWebView保留]方法中在蘋果的代碼中崩潰(方法灰顯),如下所示。
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?