在@interface
,我有這樣的聲明:如何初始化init中的Objective C類變量?
@interface myClass {
NSDictionary * myData;
}
@property (nonatomic, assign) NSDictionary * data;
+ (id) initWithData:(NSDictionary *)data;
@end
在@implementation
,我有這樣的代碼:
@implementation
@synthesize data;
+ (id) initWithData:(NSDictionary *)freshData {
self = [super init];
if (self) {
self->data = freshData;
}
return self;
}
@end
但我對self->data
遇到錯誤Incomplete definition of type 'struct objc_class
。
如果更改成self.data
,我得到錯誤Member reference type 'struct objc_class *' is a pointer; did you mean to use '->'?
如果我刪除self
,我得到錯誤`實例變量「數據」中的方法訪問「。
但是,如果我將方法類型從+
(類方法)更改爲-
(實例方法),我無法訪問init。
而且我無法通過將作業從data
更改爲myData
來修復此錯誤。
我應該如何構造一個構造函數?
我從(但沒有幫助)學到的鏈接是:
如果我只實現' - (instancetype)initWithData:(NSDictionary *)freshData'沒有'+(id)initWithData:(NSDictionary *)freshData',那麼缺點是什麼? –
那麼你也可以這樣做,如果創建該類的對象沒有任何問題,就像使用實例方法一樣,您需要創建該類的對象以使用該方法並使用類方法可以使用Class調用該方法。 – Rajat
檢查這也適用於類方法vs實例方法 - http:// stackoverflow。com/questions/1053592 /類與實例方法之間的區別 – Rajat