Dieser Code ist ziemlich einfach, ist er korrekt? Ich weiß nicht, ob ich den Delegaten, der über die init-Methode übergeben wird, beibehalten sollte.
@interface SomeClass : NSObject {
SomeClassDelegate *someClassDelegate;
}
-(id)initWithDelegate:(SomeClassDelegate *)delegate;
@end
@implementation SomeClass
-(id)initWithDelegate:(SomeClassDelegate *)delegate
{
[delegate retain]; // should I be doing this?
someClassDelegate = delegate;
}
-(void)dealloc
{
[delegate release]; // obviously only do this if I DO need to retain it
[super dealloc];
}
@end
Mein erster Gedanke war nein, aber dieses Stück Code scheint etwas anderes zu bedeuten. Ich weiß, ich kann nicht auf behalten zählt verlassen, aber ich möchte den richtigen Weg, um mit Delegaten zu behandeln wissen.
// self's retain count is 1
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
// the retain count is now 2, did the init of URLConnection retain self?
1 Stimmen
NSURLConnection ist ein etwas spezieller Fall. Es ist nicht so sehr, dass es den Delegaten beibehält, sondern dass es ihn beibehält für die Dauer der Verbindung da die einzige Möglichkeit, den Empfang von Delegatenmeldungen zu beenden, darin besteht, die Verbindung abzubrechen. D.h. normalerweise behält man einen Delegaten nicht, und das Verhalten von NSURLConnection ist ein Implementierungsdetail; nicht etwas, auf das man sich verlassen oder das man im Allgemeinen nachahmen sollte. Außerdem ist es ungewöhnlich, einen Delegaten zu haben Klasse . Normalerweise deklarieren Sie ein Delegiertenprotokoll.
0 Stimmen
Danke Mike, das erklärt, was ich sehe.