IOS开发笔记之二十七——一个@dynamic导致的crash问题
2015-06-03 11:39
525 查看
1、最近好好的工程代码突然冒出一个crash的bug,A类的crash日志如下:
crash日志的大致意思就是找不到setTitleCell这个方法;
而titleCell是A类的一个cell属性,
@property (nonatomic,strong)TitleCell *titleCell;
后来发现,这个titleCell属性在实现时,被人声明为以下:
注释掉这行代码,就不会再crash。
2、@dynamic关键字与@synthesize关键字的用法
当一个@property的属性被@synthesize修饰时,意味着如果你没有手动实现属性的setter方法和getter方法,那么编译器酒会自动为你生成它们;
当一个@property的属性呗@dynamic修饰时,就意味着属性的getter与setter方法需要由用户自己实现,不会自动生成。如果你没有手动提供setter或者getter方法,那么编译时没问题,但是在程序运行类似self.titleCell=
[TitleCell new]或者TitleCell *cell = self.titleCell时,就会因为缺少setter方法和getter方法而crash。编译没问题,运行时才会执行相应的方法,就是所谓的动态绑定机制。
当然,如果你们没有显示声明它们,默认就是@syntheszie方式;
3、参考链接
http://blog.csdn.net/haishu_zheng/article/details/12873151
2015-06-03 11:42:53.807 DPScope[86379:1639651] -[A setTitleCell:]: unrecognized selector sent to instance 0x7fd5fe7d0400 2015-06-03 11:42:53.815 DPScope[86379:1639651] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[A setTitleCell:]: unrecognized selector sent to instance 0x7fd5fe7d0400' *** First throw call stack: ( 0 CoreFoundation 0x0000000112203c65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000111e9abb7 objc_exception_throw + 45 2 CoreFoundation 0x000000011220b0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 3 CoreFoundation 0x000000011216113c ___forwarding___ + 988 4 CoreFoundation 0x0000000112160cd8 _CF_forwarding_prep_0 + 120
crash日志的大致意思就是找不到setTitleCell这个方法;
而titleCell是A类的一个cell属性,
@property (nonatomic,strong)TitleCell *titleCell;
后来发现,这个titleCell属性在实现时,被人声明为以下:
@implementation A @dynamic titleCell;
注释掉这行代码,就不会再crash。
2、@dynamic关键字与@synthesize关键字的用法
当一个@property的属性被@synthesize修饰时,意味着如果你没有手动实现属性的setter方法和getter方法,那么编译器酒会自动为你生成它们;
当一个@property的属性呗@dynamic修饰时,就意味着属性的getter与setter方法需要由用户自己实现,不会自动生成。如果你没有手动提供setter或者getter方法,那么编译时没问题,但是在程序运行类似self.titleCell=
[TitleCell new]或者TitleCell *cell = self.titleCell时,就会因为缺少setter方法和getter方法而crash。编译没问题,运行时才会执行相应的方法,就是所谓的动态绑定机制。
当然,如果你们没有显示声明它们,默认就是@syntheszie方式;
3、参考链接
http://blog.csdn.net/haishu_zheng/article/details/12873151
相关文章推荐
- 我的测试记录之IOSv.1.2.1.1历史快照总结
- iOS Crash闪退日志获取和上传至服务器
- iOS coredata 级联删除
- iOS多线程之Pthread/NSthread
- IOS中的线程操作(2)
- 类方法与实例方法的区别
- iOS crash日志的处理
- iOS开发那些事-iOS6苹果地图有用开发
- iOS消息机制基于广播模型
- iOS 照片存储到沙盒 和读取
- IOS开发之----enum与typedef enum的用法
- 【iOS百度地图系列_2】卫星图、交通图、热力图及在基本地图上添加覆盖物
- iOS API 概述
- 网易新闻iOS版使用的18个开源组件
- ios:KVC的概述与使用
- iOS8中使用CoreLocation定位
- IOS中的线程操作(1)
- 30多个iOS常用动画,带详细注释
- iOS - 需求 - 将参数进行字典排序组成字符串(待签名字符串)
- 使用Xcode和Instruments调试解决iOS内存泄露