解決在 Xcode 5.1環境下property所造成的 synthesis warning問題?
將 Xcode 升級到最新的 5.1,在使用AFNetworking時遇到了 property synthesis 相關的 error,錯誤資訊如下:
Auto property synthesis will not synthesize property 'request' because it is 'readwrite' but it will be synthesized 'readonly' via another property
Auto property synthesis will not synthesize property 'response' because it is 'readwrite' but it will be synthesized 'readonly' via another property
在AFHTTPRequestOperation中定義了:
@property (readwrite, nonatomic, strong) NSURLRequest *request;
@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response;
就是這樣的程式碼,會讓 request property
出現 warning。原因是因為 compiler
讀取 sub-class 時,會發現 request 明明應該是個 readonly property(super-class
講的),但你卻要將它設為 readwrite
但你知道 super-class 的實現,也會將這個 property 改成readwrite,因此你在 sub-class 的實現裡這樣子寫是不會有問題的。可是 compiler 不知道啊,這要怎麼辦呢?
你要告訴 compiler,要它不用擔心。那要怎麼告訴 compiler 呢?你需要的是@dynamic,它是一種給 compiler 的「承諾」,承諾它「雖然你現在不知道該怎麼辦,但是在 runtime 的時候你就會知道了」。所以只要把程式碼改成以下這樣就可以了:
@implementation AFHTTPRequestOperation
@dynamic response;
@dynamic request;
@end