我使用生成器模式做這樣的事情是否可以在init-called塊中設置只讀屬性?
- (instancetype)initUsingBlock:(void(^)(id mutableCopy))block
{
self = [super init];
if (self && block)
{
__block id mutableInstance = [self mutableCopy];
block(mutableInstance);
self = [mutableInstance copy];
}
return self;
}
和設置使用塊屬性。 我這樣做的目的是不必爲這個子類的每個子類重寫但這些屬性是init
。readonly
,並試圖在塊中設置它們 - 在另一個類中調用 - 會引發錯誤。有沒有正確的方法來做到這一點? __block
在這裏似乎沒有什麼不同。
編輯:因此,由於這裏的評論,我意識到,繼續我想要做的事情並不是一個好主意,所以我完全放棄了構建器模式,但我仍然會不知道這是否可能。
對於尚未初始化的對象('[self mutableCopy]')做一個可變副本意味着什麼?另外,你知道'mutableCopy'不會神奇地讓你的類的屬性讀寫,對吧?你採用了'NSMutableCopying'並實現了'-mutableCopyWithZone:'?它有什麼作用?最後,關於「我這樣做的目的是不必爲這個子類的每個子類重寫init [...]是否有正確的方法來做到這一點?」,我會恭敬地說,不,沒有正確的方法來做到這一點。這是一個壞主意。 –