2015-08-07 12 views
6

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.

risposta

3

Sfortunatamente, non sono riuscito a trovare nessuna bandiera di avviso per quello. Comunque sarebbe una cosa interessante. È possibile fare riferimento a this site per un elenco di tutti gli avvisi di clang che è possibile abilitare in Xcode.

1

Questa non è tecnicamente una risposta alla mia domanda perché la mia domanda chiede se c'è un'impostazione per abilitare l'avviso e la risposta è "no" secondo la risposta accettata.

Tuttavia, se si desidera trovare tali casi, è possibile eseguire una ricerca globale utilizzando un'espressione regolare. Devi cambiare le opzioni di ricerca in "Espressione regolare".

trovare qualcosa di simile

@property (nonatomic, assign) NSNumber* ...

è possibile utilizzare l'espressione regolare

assign\) [a-zA-Z]+\*

Si può giocare con essa. Ad esempio, se si mette uno spazio tra il tipo e l'asterisco nella vostra dichiarazione di proprietà come questa

@property (nonatomic, assign) NSNumber * ...

è sufficiente aggiungere uno spazio prima della barra che sfugge l'asterisco come questo

assign\) [a-zA-Z]+ \*