2016-08-30 6 views
3

엑스 코드 8 주소 소독제를 활성화, 내가 다음 코드 줄에서 문제를 어떻게해야합니까 :엑스 코드 주소 : @ ""`

UIImage *myImage = [UIImage imageNamed:imageName]; 

imageName가 따라있는 NSString입니다 이미지가 @ 1x, @ 2x, @ 3x에 존재합니다. 주소 살균제 문제 :

================================================================= 

==2484==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x01d37310 in thread T0 #0 0x1fff73 in wrap_free (/private/var/mobile/Containers/Bundle/Application/C92A762E-DAAF-46D9-857B-151BAF97D0BB/Example.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib+0x32f73) #1 0x2b50fab5 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2ab5) #2 0x2b50fbe5 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2be5) #3 0x2b5463e1 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x393e1) #4 0x2b548307 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b307) #5 0x2b548233 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b233) #6 0x2b5606db in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x536db) #7 0x2b560233 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x53233) #8 0x2924b611 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632611) #9 0x2924b375 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632375) #10 0x2924baf3 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632af3) #11 0x28eaf8bd in (/System/Library/Frameworks/UIKit.framework/UIKit+0x2968bd) #12 0x28d46e45 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x12de45) #13 0x76c4d1 in -[MyClass myMethod] (/private/var/mobile/Containers/Bundle/Application/C92A762E-DAAF-46D9-857B-151BAF97D0BB/Example.app/Frameworks/XY.framework/XY+0x2e4d1) #16 0x28c2874b in (/System/Library/Frameworks/UIKit.framework/UIKit+0xf74b) #17 0x28c284bb in (/System/Library/Frameworks/UIKit.framework/UIKit+0xf4bb) #18 0x28c2e5e5 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x155e5) #19 0x28c2bf5d in (/System/Library/Frameworks/UIKit.framework/UIKit+0x12f5d) #20 0x28c9707f in (/System/Library/Frameworks/UIKit.framework/UIKit+0x7e07f) #21 0x28e8a505 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x271505) #22 0x28e8cacd in (/System/Library/Frameworks/UIKit.framework/UIKit+0x273acd) #23 0x28e977a7 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x27e7a7) #24 0x28e8b285 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x272285) #25 0x2c09aebf in (/System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices+0x15ebf) #26 0x2558e253 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xd0253) #27 0x2558d517 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xcf517) #28 0x2558c071 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xce071) #29 0x254d799f in CFRunLoopRunSpecific (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x1999f) #30 0x254d77b1 in CFRunLoopRunInMode (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x197b1) #31 0x28c8da55 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x74a55) #32 0x28c88633 in UIApplicationMain (/System/Library/Frameworks/UIKit.framework/UIKit+0x6f633) #34 0x34020aad in (/usr/lib/system/libdyld.dylib+0x1aad) 0x01d37310 is located 0 bytes inside of 34-byte region [0x01d37310,0x01d37332)

존재하지 않는 imageName을 사용하면 주소 살균기는 해당 줄에 아무런 문제가 없습니다.

문제는 iOS 8에만 영향을 미치는 것으로 보이며, 주소 살생자는 iOS 9 및 iOS 10 (최신 베타)에 문제가 없습니다. iOS 8에서는 이미지를 애셋에 넣지 않고 직접 번들에 넣을 때도 작동합니다.

답변

3

이것은 Xcode 8 Beta 6 (8S201h)의 버그 인 것 같습니다. iOS 8.3으로 앱의 배포 대상을 UIImage imageNamed:으로 설정하면 참조 된 이미지가 애셋 카탈로그에서 오는 경우 오류가 발생합니다. UIImage imageNamed:inBundle:compatibleWithTraitCollection:을 사용하면 효과가 없습니다.

해결 방법 :

  • 설정 전개 대상 < 아이폰 OS 8.3. 이 문제에 대한 예제 프로젝트에서 찾을 수 있습니다

나를 위해 아이폰 OS 8.0/0.1/0.2 일, 8.3/0.4는

  • 이 애플 리케이션 번들에 직접 이미지를 넣어 충돌 유지되지 자산 카탈로그 GitHub

  • +0

    이 호에 레이더를여셨습니까? – pablobart

    +0

    예, 이미 사과에 레이더를 제출했습니다. – benrudhart

    +0

    동일한 동작을 보았습니다. Beta 6 릴리스 노트 (http://adcdownload.apple.com/Developer_Tools/Xcode_8_beta_6/Release_Notes_for_Xcode_8_beta_6.pdf)를 확인했으며 Apple은 발행물. 그들은 문제가 16 비트 자산과 관련된다고 말합니다 : '16 비트 또는 P3 자산을 포함하고 iOS 8.4 이전 버전으로 배포하는 자산 카탈로그는 메모리 손상을 경험할 수 있으며 Xcode 8.0을 사용하여 빌드하면 충돌 할 수 있습니다 .' – pablobart