ARC Semantic issue:No visiable @interface for xxx declares the selector yyy编译错误

出现该错误一般是类方法中调用了对象的方法。




警告:Captureing ‘self’ strongly in this block is likely to lead to a retain cycle


这个警告我们在使用block时会经常碰到,什么原因引起的呢?其实是ARC机制造成的


分析:Block对象在创建时会retain一次,如果在block中使用self.xxx时,ARC会自动将self也retain一次,这样就形成了一个retain cycle


解决:创建一个本地变量blockSelf,指向self,然后用结构体语法访问实例变量。


如:__block ViewController *blockSelf = self;
然后在block中需要用到self.xxx时,改成blockSelf.xxx就可以了,因为这么修改之后,blockSelf是本地变量,是弱引用,因此在_block被retain的时候,并不会增加retain count,所以retain cycle就解除了,Xcode也不再出现警告了,问题解决。




2014-09-01 15:55:54.703 RouteMapInformation[26443:60b] Attempt to set a non-property-list object (
    "\U4e00\U952e\U627e\U8f66\Uff0c\U65b9\U4fbf\U5feb\U6377\Uff0c\U7701\U65f6\U7701\U529b",
    "<RMGuideView: 0x9b58d90; baseClass = UILabel; frame = (0 0; 320 480); text = '\U4e00\U952e\U627e\U8f66\Uff0c\U65b9\U4fbf\U5feb\U6377\Uff0c\U7701\U65f6\U7701\U529b'; gestureRecognizers = <NSArray: 0x9b662f0>; animations = { opacity=<CABasicAnimation: 0x9b46e20>; }; layer = <CALayer: 0x9b419e0>>"
) as an NSUserDefaults value for key RMGuideView
出现这种情况的根本原因是什么,其实最后一行有关键字“NSUserDefaults”,NSUserDefaults 不能用来存储图像对象 ,这是因为正如异常说, UIImage 不是一个属性列表对象。属性列表是这些,和仅是这些类 (或任何子类) 的对象的组合:
NSArray
NSDictionary
NSString
NSData
NSDate
NSNumber能够保存在NSUserDefaults中的对象只能是上述几种或组合,并且内部子元素也只能是以上几种,比如创建一个图片UIImage数组Array,再将数组Array保存到NSUserDefaults中,这样是不行的,那么一定要将UIImage图片保存下来该如何做呢?用NSData格式化编码,至于如何编码不属于本次讨论的范畴,去看看NSData的用法就明了,很简单的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值