【问题标题】:Xcode address sanitizer issue with `UIImage imageNamed:@""``UIImage imageNamed:@""` 的 Xcode 地址清理程序问题
【发布时间】:2016-08-30 09:15:43
【问题描述】:

在 Xcode 8 中激活地址清理程序时,我确实在以下代码行中遇到了问题:

UIImage *myImage = [UIImage imageNamed:imageName];

imageName是一个NSString,对应的图片存在于@1x,@2x, @3x。地址清理问题:

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

==2484==错误:AddressSanitizer:尝试释放不是 malloc() 的地址:线程 T0 中的 0x01d37310 #0 0x1fff73 在 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 在(/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2ab5) #2 0x2b50fbe5 在(/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2be5) #3 0x2b5463e1 在(/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x393e1) #4 0x2b548307 在(/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b307) #5 0x2b548233 在(/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b233) #6 0x2b5606db in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x536db) #7 0x2b560233 在(/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x53233) #8 0x2924b611 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x632611) #9 0x2924b375 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x632375) #10 0x2924baf3 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632af3) #11 0x28eaf8bd 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x2968bd) #12 0x28d46e45 在(/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 在(/System/Library/Frameworks/UIKit.framework/UIKit+0xf74b) #17 0x28c284bb 在(/System/Library/Frameworks/UIKit.framework/UIKit+0xf4bb) #18 0x28c2e5e5 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x155e5) #19 0x28c2bf5d 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x12f5d) #20 0x28c9707f 在 (/System/Library/Frameworks/UIKit.framework/UIKit+0x7e07f) #21 0x28e8a505 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x271505) #22 0x28e8cacd 在 (/System/Library/Frameworks/UIKit.framework/UIKit+0x273acd) #23 0x28e977a7 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x27e7a7) #24 0x28e8b285 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x272285) #25 0x2c09aebf 在(/System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices+0x15ebf) #26 0x2558e253 在(/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xd0253) #27 0x2558d517 在(/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xcf517) #28 0x2558c071 在(/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xce071) #29 CFRunLoopRunSpecific 中的 0x254d799f (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x1999f) #30 0x254d77b1 在 CFRunLoopRunInMode (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x197b1) #31 0x28c8da55 在(/System/Library/Frameworks/UIKit.framework/UIKit+0x74a55) #32 0x28c88633 在 UIApplicationMain (/System/Library/Frameworks/UIKit.framework/UIKit+0x6f633) #34 0x34020aad 在 (/usr/lib/system/libdyld.dylib+0x1aad) 0x01d37310 位于 34 字节区域内的 0 字节 [0x01d37310,0x01d37332)

当我使用不存在的 imageName 时,地址清理程序对该行没有问题。

这个问题似乎只影响 iOS 8,地址清理器在 iOS 9 和 iOS 10(最新测试版)上没有问题。在 iOS 8 上,当我不将图像放入资产而是直接放入捆绑包时,它也可以工作。

【问题讨论】:

    标签: ios xcode address-sanitizer


    【解决方案1】:

    这似乎是 Xcode 8 Beta 6 (8S201h) 中的一个错误。 将应用程序的部署目标设置为 iOS 8.3 时,当引用的图像来自资产目录时,调用 UIImage imageNamed: 将崩溃。使用UIImage imageNamed:inBundle:compatibleWithTraitCollection: 不会有什么不同。

    解决方法:

    • 设置部署目标
    • 将图像直接放在应用程序包中,而不是资产目录中

    可以在GitHub上找到有关此问题的示例项目

    【讨论】:

    • 你为这个问题打开了雷达吗?
    • 我看到了同样的行为,我查看了 Beta 6 发行说明 (adcdownload.apple.com/Developer_Tools/Xcode_8_beta_6/…),Apple 描述了一个类似的问题。他们提到问题在于 16 位资产:Apps with asset catalogs containing 16bit or P3 assets and deploying to iOS 8.4 or earlier will experience memory corruption and likely crash if built with Xcode 8.0.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多