Ho un auto-sintetizzato readonly
& weak
proprietà:Prevenire ARC a zero un ivar debole subito dopo l'assegnazione (in build di rilascio)
@property (nonatomic, readonly, weak) KTWindowController* windowController;
assegno l'ivar sintetizzato e quindi aggiungere in un array:
_windowController = [KTWindowController controller];
[self addSubController:_windowController];
Questo funziona bene in build di debug. Ma ho un report che in versione (ad hoc) costruisce questo immediatamente nil _windowController
e poi tenta di aggiungere nil alla matrice, bloccando l'app.
Quale impostazione specifica (livello di ottimizzazione?) In una versione (ad hoc) di build modifica questo comportamento rispetto alle build di Debug?
Mi sembra strano che questo comportamento cambi da build di Debug a Release. Ma sono stato in grado di riprodurre questo comportamento, e in realtà ha senso - non solo quando non è coerente con ciò che accade nelle build di debug.
La soluzione suggerita:
KTWindowController* windowController = [KTWindowController controller];
[self addSubController:windowController];
_windowController = windowController;
Altro che usare una variabile locale come visto sopra, ciò che soluzione mi consiglia, in casi come questi?
Forse questa è una domanda stupida, ma perché stai assegnando direttamente a ivar invece di usare 'self.windowController = [KTWindowController controller]'? – bdesham
La domanda ** è ** sciocca: la proprietà è in sola lettura. ;) – LearnCocos2D
OK, abbastanza giusto ;-) – bdesham