@dynamic
1389 ワード
参照リンク
@dynamicと@synthesizeの違い
@propertyには@synthesizeと@dynamicの2つの対応する語があります.@synthesizeも@dynamicも書かれていない場合は、デフォルトは@syntheszie var=var;
@synthesizeの意味は、setterメソッドとgetterメソッドを手動で実装していない場合、コンパイラが自動的にこの2つのメソッドを追加することです.
@dynamicはコンパイラに,属性のsetterとgetterメソッドはユーザ自身が実現し,自動的に生成されないことを教える.(もちろんreadonlyのプロパティにはgetterを指定するだけです).属性が@dynamicvarとして宣言され、@setterメソッドと@getterメソッドが提供されていない場合は、コンパイル時に問題ありませんが、プログラムがinstanceに実行されます.var=someVar、setterメソッドが欠けているためプログラムがクラッシュします;あるいはsomeVar=varに実行すると、getterメソッドが欠けているためクラッシュすることもあります.コンパイル時に問題なく、実行時に対応するメソッドが実行されます.これがいわゆるダイナミックバインドです.
readonly 。
パーソナルテストコード
@interface T1Model : NSObject
@property (nonatomic,copy,readonly) NSString *name;
@end
#import "T1Model.h"
#import
@implementation T1Model
@dynamic name; // get set
- (NSString *)name{
NSString *str = objc_getAssociatedObject(self, @selector(name));
if (str) {
return str;
}
BOOL offset = YES;
//
if (offset) {
objc_setAssociatedObject(self, @selector(name), @"", OBJC_ASSOCIATION_COPY);
}
return objc_getAssociatedObject(self, @selector(name));
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
T1Model *model = [T1Model new];
NSString *name = model.name ;
NSString *name1 = model.name ;
}