Supongo que la versión del compilador que está usando sigue las reglas de administración de memoria para las propiedades declaradas, más específicamente, para los accesores de las propiedades declaradas:
Usted toma posesión de un objeto si lo crea usando un método cuyo nombre comienza con "alloc", "new", "copy" o "mutableCopy".
Una propiedad denominada newTitle, cuando se sintetiza, produce un método llamado -newTitle, de ahí la advertencia / error. -newTitlese supone que es un método getter para la newTitlepropiedad, sin embargo, las convenciones de nomenclatura establecen que un método cuyo nombre comienza con newdevuelve un objeto que pertenece al llamador, que no es el caso de los métodos getter.
Puedes resolver esto de la siguiente manera:
Renombrar esa propiedad:
@property (strong, nonatomic) NSString *theNewTitle;
Mantener el nombre de la propiedad y especificar un nombre getter que no comience con uno de los prefijos de nombres de métodos especiales:
@property (strong, nonatomic, getter=theNewTitle) NSString *newTitle;
Mantener tanto el nombre de la propiedad como el nombre del captador, y decirle al compilador que, aunque el nombre del captador comienza con new, pertenece a la nonefamilia de métodos en lugar de a la newfamilia de métodos:
#ifndef __has_attribute
#define __has_attribute(x) 0 // Compatibility with non-clang compilers
#endif
#if __has_attribute(objc_method_family)
#define BV_OBJC_METHOD_FAMILY_NONE __attribute__((objc_method_family(none)))
#else
#define BV_OBJC_METHOD_FAMILY_NONE
#endif
@interface ViewController : UIViewController
@property (strong, nonatomic) NSString *newTitle;
- (NSString *)newTitle BV_OBJC_METHOD_FAMILY_NONE;
@end
Tenga en cuenta que aunque esta solución le permite mantener newTitletanto el nombre de la propiedad como el nombre del captador, tener un método llamado -newTitleque no devuelva un objeto propiedad de la persona que llama puede ser confuso para otras personas que leen su código.
Para el registro, Apple ha publicado Transition to ARC Release Notes , en el que declaran:
No puede dar a una propiedad un nombre que comience con newo copy.
Ya se les ha notificado que su declaración no es del todo precisa: el culpable es el nombre del método getter, no el nombre de la propiedad.
Edición 17 de enero de 2015: Acabo de notar un compromiso reciente con Clang que sugiere la opción 3 anterior (usando objc_method_family(none)), incluido un arreglo, para el caso general en el que el nombre de una propiedad coincide con uno de los prefijos de familia de métodos especiales. Xcode probablemente incorporará este cambio eventualmente.