ios arc (四)将mrc代码转成arc 常见错误
为了方便查找,再此列出一些在转换时可能出现的问题,当然在我们使用ARC时也需要注意避免代码中出现这些问题:
- “Cast … requires a bridged cast”
这是我们在demo中遇到的问题,不再赘述
- Receiver type ‘X’ for instance message is a forward declaration
这往往是引用的问题。ARC要求完整的前向引用,也就是说在MRC时代可能只需要在.h中申明@class就可以,但是在ARC中如果调用某个子类中未覆盖的父类中的方法的话,必须对父类.h引用,否则无法编译。
- Switch case is in protected scope
现在switch语句必须加上{}了,ARC需要知道局部变量的作用域,加上{}后switch语法更加严格,否则遇到没有break的分支的话内存管理会出现问题。
- A name is referenced outside the NSAutoreleasePool scope that it was declared in
这是由于写了自己的autoreleasepool,而在转换时在原来的pool中申明的变量在新的@autoreleasepool中作用域将被局限。解决方法是把变量申明拿到pool的申请之前。
- ARC forbids Objective-C objects in structs or unions
可以说ARC所引入的最严格的限制是不能在C结构体中放OC对象了..因此类似下面这样的代码是不可用的
1 2 3 4 typedef struct { UIImage *selectedImage; UIImage *disabledImage; } ButtonImages; 这个问题只有乖乖想办法了..改变原来的结构什么的..
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: __bridge,__bridge_transfer和__bridge_retained
- 下一篇:没有了