Dada la siguiente definición de una clase con propiedades retener:¿Por qué esta propiedad necesita el 'retener'?
@interface FeedEntry : NSObject<NSCoding>
{
NSURL* url;
NSData* source;
}
@property (retain) NSURL* url;
@property (retain) NSData* source;
@end
@implementation FeedEntry
@synthesize url;
@synthesize source;
-(void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:url forKey:@"url"];
[coder encodeObject:source forKey:@"source"];
}
¿Por qué la propiedad url en el método initWithCoder necesitan el "mantener":
-(id)initWithCoder:(NSCoder*)coder
{
url = [[coder decodeObjectForKey:@"url"] retain];
source = [coder decodeObjectForKey:@"source"];
NSLog(@"got url=%@\n", url);
return self;
}
Específicamente, ¿por qué no la sintetiza " obtener el método "url" retener el objeto? (Supongo que la propiedad fuente también necesitará un retener).
¡De hecho! Tengo la sensación de que esto me morderá con bastante frecuencia. Gracias por su respuesta. – Justicle
Mi placer. Toma un tiempo acostumbrarse, al principio. Una vez que lo has estado haciendo por un tiempo, se convierte en una segunda naturaleza :) –
Esa es una de las razones por las que me gusta utilizar un prefijo _ en variables de instancia privadas, hace que sea muy fácil saber cuándo estás usando una variable de instancia contra todo lo demás. –