1
在iOS文檔中閱讀KVC兼容時。我試圖測試一個班級。 KVC Class是否合規?KVC兼容類
但我有一些問題:
沒有setter方法的屬性「姓名」,「年齡」,類仍然使用KVC沒有錯誤 ,沒有異常將被解僱
當沒有爲屬性創建setter時,編譯器會做什麼? 是否創造了一對二傳手和獲得者?
Person.h
@interface Person : NSObject { NSString *name; NSInteger age; }
Person.m
@implementation Person - (id)init { self = [super init]; if (self) { name = @"Duc Nguyen"; age = 10; } return self; }
ViewController.m
- (IBAction)showKeyKVC:(id)sender { //--test kvc name1.text = [person valueForKey:@"name"]; age1.text = [NSString stringWithFormat:@"%@", [person valueForKey:@"age"]]; }
當我按下按鈕的結果是:年齡:10,名稱:Duc Nguyen。 我不明白在這種情況下班級如何使用KVC?
因此,我強烈建議覆蓋'+ accessInstanceVariablesDirectly'來爲所有自定義類返回NO。 KVC直接訪問實例變量的方式是一種可怕的封裝和隱藏錯誤。 –