protocol使用@property
2017-12-05 本文已影响0人
Kx_
1、在protocol中也是可以使用property的,先看代码
#import <Foundation/Foundation.h>
@protocol DataManageDelegate <NSObject>
@property (nonatomic, copy) NSString *identifier;
@end
在ViewController中遵循了该协议之后,然后给identifier
赋值self.identifier = @"123";
,运行工程,发现crash了,Xcode提示是:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController setIdentifier:]: unrecognized selector sent to instance 0x7f8ad4f069e0'
,意思就是没有实现identifier的setter方法。getter方法没实现同样会crash。
2、解决方法:
加上@synthesize identifier = _identifier;
,让编译器自动生成setter和getter方法。这样就不会crash了
3、@dynamic是让系统不要自动生成setter和getter方法,如果使用了@dynamic但是没有自己实现setter和getter方法,赋值或者取值的时候就会crash,这个比较少用。