dealloc에서 포인터를 nil로 설정하지 않으면 두 번째 개체가 dealloc 될 때 두 번째 개체에서 생성 된 개체가 dealloc되지 않습니다.ARC에서 개체가 삭제되지 않습니다.
개체가 dealloc 될 때 ARC는 기본적으로 모든 포인터를 nil로 설정해야한다고 생각하여 소유 한 개체를 해제합니다. 내가 뭔가 잘못하고
@interface Obj1 : NSObject
{
Obj2 *obj2;
}
@interface Obj2 : NSObject
{
}
@implementation Obj1
-(void)dealloc
{
obj2 = nil; // <--- This is needed to get obj2 to be dealloc'd.
NSLog(@"Obj1 dealloc");
}
-(id)init
{
if ((self = [super init]) == nil)
return nil;
obj2 = [[Obj2 alloc] init];
return self;
}
@end
@implementation Obj2
-(void)dealloc
{
NSLog(@"Obj2 dealloc");
}
-(id)init
{
if ((self = [super init]) == nil)
return nil;
return self;
}
@end
암 : 여기
은 (단지 코어) 내 코드? 내가 읽은 모든 것은 이것이 작동해야한다고 말한다. 아무도 obj2를 보유하고 있지 않으므로 obj2를 설정하지 않으면 obj2가 해제됩니다. dealloc 함수를 사용하거나 사용하지 않고 코드를 시험해 보았습니다. 뭔가를 망칠 경우를 대비해서 동일한 결과를 얻었습니다.
파일이 obj-C++로 컴파일되고 있지만 C++ 및 개체로는 아무 것도하지 않습니다.
감사합니다.
OK :
는 다음 입력 파일이 저장된 디렉터리로 변경, 당신은
arc_tst.m
그것을라는 이름의 한 가정을 컴파일하려면 , 나는 그 문제를 발견했다. 좀비 오브젝트 사용 설정을했습니다. 그것이 nil로 설정되지 않은 경우 객체가 삭제되지 않도록하는 것이 놀랍습니다. 나는 좀비 오브젝트가 삭제 된 후에 그 오브젝트 대신에 놓인다고 생각했습니다. dealloc을 호출하지 않으면 더 큰 문제가 발생할 수 있습니다. –