Понятно, что ARC не будет знать о вашей [netService_ stop];
линии. Вы должны включить это самостоятельно, так как это нестандартно и не имеет отношения к retain
/ release
.
Сразу после запуска dealloc
ARC высвободит все свойства strong
и weak
(и __strong
и __weak
iVars).
Вот некоторый тестовый код, просто чтобы посмотреть, что происходит:
@interface TestClass : NSObject
@property (nonatomic, strong) TestClass *anotherTestObject;
@end
@implementation TestClass
@synthesize anotherTestObject;
- (void)dealloc {
NSLog(@"I am deallocing %d", self.hash);
}
@end
И мой тест:
TestClass *thing1 = [[TestClass alloc] init];
NSLog(@"thing 1 %d", thing1.hash);
thing1.anotherTestObject = [[TestClass alloc] init];
NSLog(@"thing 2 %d", thing1.anotherTestObject.hash);
Это распечатает что-то вроде этого
thing 1 1450176
thing 2 1459984
I am deallocing 1450176
I am deallocing 1459984
Поскольку только один из объектов автоматически освобождается (thing1
) в конце тестового кода, вы можете сразу сказать, что thing2
выпускается кем-то другим (так как он находится в свойстве strong
). Однако, если вы перезаписаете setAnotherTestObject
, вы обнаружите, что ARC не устанавливает его на nil
, а просто просто освобождает его напрямую. Вы не можете переопределить release
в ARC, иначе я мог бы продемонстрировать это тоже;)
Если я корректирую код и использую weak
вместо strong
, то же поведение сохраняется, но выходные данные отличаются, поскольку тестовый пример вообще не удерживает слабую ссылку.