C'è un avviso Xcode, o qualsiasi tipo di modo per ottenere un avviso, quando si dichiara una proprietà oggetto (tipo di riferimento) utilizzando l'attributo assign
in ARC:Avviso Xcode se si utilizza l'attributo "assegna" per tipi di riferimento (oggetti)
@property (nonatomic, assign) NSNumber *myNumber;
ho convertito una proprietà long
a NSNumber
e accidentalmente dimenticato di cambiare l'attributo dal assign
a strong
.
Non ci sono avvisi o errori in fase di compilazione, e l'errore di run-time che si otterrebbe verrebbe solo a volte ed è un crash molto oscuro. Solo durante il debug si verifica un arresto anomalo e un errore come "message sent to a deallocated instance"
e questo a causa dell'utilizzo di oggetti zombi in fase di sviluppo.
Per build non di debug, l'arresto anomalo non si verifica spesso e viene segnalato (ad esempio da Crashlytics) come EXC_BAD_ACCESS - KERN_INVALID_ADDRESS
. Suppongo che l'arresto sia causato da questo problema.
Capisco che assign
è un'opzione valida per un oggetto se si vuole mantenere un debole riferimento ad esso, e non si vuole che il puntatore diventi automaticamente NULL quando l'oggetto viene deallocato. Tuttavia, immagino ci dovrebbe essere un avviso che uno può attivare o disattivare perché assign
non è qualcosa che normalmente si desidera utilizzare in ARC, ma non riesco a trovarlo nelle impostazioni di generazione.