die folgende Definition einer Klasse mit behalten Eigenschaften Gegeben: Warum nicht die synthetisierte "Warum benötigt diese Eigenschaft die "behalten"?
-(id)initWithCoder:(NSCoder*)coder
{
url = [[coder decodeObjectForKey:@"url"] retain];
source = [coder decodeObjectForKey:@"source"];
NSLog(@"got url=%@\n", url);
return self;
}
Im Einzelnen:
@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"];
}
Warum hat die Eigenschaft url in initWithCoder Methode müssen die„behalten“ get url "Methode das Objekt behalten? (Ich vermute, die Source-Eigenschaft wird auch einen Retain benötigen).
In der Tat! Ich habe das Gefühl, dass mich das ziemlich oft beißen wird. Danke für deine Antwort. – Justicle
Mein Vergnügen. Es ist zunächst etwas gewöhnungsbedürftig. Sobald Sie es für eine Weile getan haben, wird es zur zweiten Natur :) –
Das ist einer der Gründe, warum ich ein _ Präfix für private Instanzvariablen verwende, es macht es sehr einfach zu sagen, wenn Sie eine Instanzvariable verwenden gegen alles andere. –