最近学习 OC 内存管理遇到个问题
main.m
int main(int argc, const char * argv[]) {
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Dog *d = [[Dog alloc] init];
p1.dog = d;
p2.dog = d;
[d release];
p1.dog = nil;
p2.dog = nil;
return 0;
}
Dog.m
@implementation Dog
- (void)dealloc
{
NSLog(@"Dog 被销毁了");
[super dealloc];
}
@end
Person.h
@class Dog;
@interface Person : NSObject
@property(retain) Dog *dog;
@end
上面的代码运行后,可以打印出 Dog 被销毁了
。但是如果把 main.m 改成下面的代码就没有打印了。
int main(int argc, const char * argv[]) {
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Dog *d = [[Dog alloc] init];
p1.dog = d;
p2.dog = p1.dog; // 只改了这一行
[d release];
p1.dog = nil;
p2.dog = nil;
return 0;
}
感觉这个问题可能和内存管理没什么关系,可能是变量引用的问题,初学 OC 希望大佬们指点下~
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…