В некоторых случаях [self release];
используется, например, для инициализаторов (для принудительного вызова переменных, которые каким-то образом требуются), например:
SomeClass.m :
- (id)initWithString:(NSString *)string
{
self = [super init];
if (self)
{
if (string == nil)
{
[self release];
return nil;
}
// if required values are provided, we can continue ...
}
return self;
}
- (id)init
{
return [self initWithString:nil];
}
Вызывающий абонент может назвать это следующим образом:
- (void)testInitializer
{
SomeClass *classInstance1 = [[SomeClass alloc] initWithString:@"bla"];
// classInstance1 != nil, any method calls will work as expected ...
SomeClass *classInstance2 = [[SomeClass alloc] initWithString:nil];
// classInstance2 == nil, will ignore any method calls (fail silently)
SomeClass *classInstance3 = [[SomeClass alloc] init];
// classInstance3 == nil, will ignore any method calls (fail silently)
}
Я думаю, поскольку вышеприведенное работает нормально, у вас не должно быть никаких проблем, хотя это не так.кажется очень чистым решением.