ARC와 관련하여 내가 이해할 수없는 한 가지 점이 있습니다 : [... copy]
을 사용하여 생성 된 지역 변수를 어떻게 처리해야합니까? 플래그로 속성을 만들면 ARC가 자동으로 처리하지만, 알고있는 한 변수에 대해서는 __copy
플래그가 없습니다.ARC를 사용하여 ObjC에서 [obj copy]를 호출 할 수 있습니까?
@interface Foo : NSString
@end
@implementation Foo
- (void) dealloc {
NSLog(@"%p deallocated", self);
}
- (NSUInteger) length {
return 1;
}
- (unichar) characterAtIndex: (NSUInteger) i {
return 'x';
}
@end
- (void) foo {
Foo *f = [[Foo alloc] init];
NSLog(@"%p", f);
Foo *f2 = [f copy];
NSLog(@"%p", f2);
}
내가 얻을 것은 :
나는 그런 코드로이 테스트 한을
0x102406530
0x102015f10
0x102406530 deallocated
나는 복사 된 변수가하지 않는 제안하는 "0x102015f10 할당 취소"결코 풀어 놓았다. autoreleased 객체를 리턴 한 또 다른 메소드 [Foo foo]
을 만들었 기 때문에, 나중에 "할당 해제 된"메시지를 얻었 기 때문에 자동 릴리즈되지 않습니다.
그래서 속성으로 변환하지 않고 출시 할 수있는 방법이 있습니까?
이 실험을 수행하려는 경우 메모리 관리를 완전히 이해하는 수업을 사용하는 것이 좋습니다. 'NSString'은 누가 어떤 메모리 최적화를하는지 알기 때문에 당신에게 좋은 기반을 제공하지 못합니다. 또한 NSString은 클래스 클러스터의 일부이며, 상속은 당신이했던 것처럼 간단하지 않습니다. 당신이 뛰어 넘을 필요가있는 더 많은 농구가 있습니다. –
@ Paul.s 그럼 영국인 맞지? 나는 네가 존재했다는 것을 몰랐다. 이 구조는 무엇입니까? –