방금 내 응용 프로그램을 ARC로 전환했습니다. 전환은 Xcode에서 제공하는 리펙토링 도구 덕분에 부분적으로 성공했습니다. 작동하지 않는 부분은 이상한 오류입니다.iOS - EXC_BAD_ACCESS 코드 = 1 (메서드 swizzling) 초기화 후 UIWebView가 충돌 함
메서드 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 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에는 작동하지 않는 이유가 있습니까?