Gyt*_*tis 18 ios ios5 automatic-ref-counting
我已将我的应用转换为使用ARC.
在我有以下代码行之前:
NSArray *colors = [NSArray arrayWithObjects:startColor, endColor, nil];
Run Code Online (Sandbox Code Playgroud)
由于ARC不允许将非Objective-C指针类型隐式转换为'id',所以我重写了这样的行:
NSArray *colors = [NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil];
Run Code Online (Sandbox Code Playgroud)
一切都在模拟器上正常工作,但是在设备上,应用程序在提到的行上崩溃并显示错误消息:
-[Not A Type retain]: message sent to deallocated instance
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决?
Bra*_*son 30
这个桥接演员可能不起作用,正如hatfinch在他的答案中描述的那样,因为-CGColor
在你最后一次引用生成它的UIColor之后,返回的CGColorRef 可能不会挂起.根据Apple开发者论坛帖子中的讨论,我认为这是一个错误,但这是对如何管理这些CGColorRefs的生命周期的误读.
这种方法的一种方法是使用-CGColor
UIColor上的方法提供的内置桥接.不像上面那样将CGColor保存到临时变量,而是应该能够使用如下内容:
NSArray *colors = [NSArray arrayWithObjects:(id)[color1 CGColor],
(id)[color2 CGColor], nil];
Run Code Online (Sandbox Code Playgroud)
使用color1
和color2
成为UIColor实例.
-CGColor
根据" 过渡到ARC发行说明 "中的"编译器处理从Cocoa方法返回的CF对象"部分,该方法可以为您完成桥接.该文档目前缺少我上面的转换为id,这是编译它所必需的.
我已经测试了这个,它似乎适用于我的情况,匹配Ben在上面链接的Developer Forums线程中报告的内容.
除上述外,你可以明确地保留和释放CGColorRefs从返回的-CGColor
方法,然后再在你的NSArray跨天桥上他们,hatfinch显示在这里.
归档时间: |
|
查看次数: |
5551 次 |
最近记录: |