내 시나리오는 다음과 같습니다. 나는 클래스 A를 가지고있다. 그 구현 안에서는 B 타입의 객체를 만들고 B의 델리게이트를 self로 설정한다. (따라서 클래스 A의 구현 내부에있는 B.delegate = self
). 물론ARC 문제 - 위임 방법을 전달할 수 없습니까?
"선택 printThis에 대해 알려진 바 없음 인스턴스 메소드"
그리고 클래스 A는 인스턴스 메서드 B의 구현 내부 지금 - (void)printThis;
, 내가 [delegate printThis];
을하려고 할 때, 그것은 내게 오류를 준다있다 이것이 내가 ARC를 사용할 때입니다. 위의 위임 패턴은 ARC없이 iOS 4.x에서 제대로 작동하는 데 사용되었습니다. 그리고 ARC 스위치를 끄면 여전히 작동합니다. ARC와 대리인에게 전달되는 메시지는 무엇입니까?
해골 코드 :
A.h
@class B;
@interface A: blah blah
{
B objB;
}
-(void) printThis;
A.m
objB = [[B alloc] init];
objB.delegate = self;
- (void)printThis {
//doSomething
}
B.h
@interface B: blah blah
{
//id delegate; //used to be there, now I just property & synthesize
}
@property (nonatomic,weak) id delegate;
B.m
@synthesize delegate;
[delegate printThis]; //error with ARC ON, works with OFF
중요 편집 :
그리고 마음 당신이 여기 저기 방법에 대해 발생합니다. 예를 들어, 오류없이 작동하는 A printThat 등 기타 몇 가지 방법이 있습니다. 나는 일어나고있는 것에 관해서 단서가 없다!
궁금한 점이 있으십니까? ivar에 직접 액세스하는 대신에'delegate'에 대한 getter를 직접 사용해 본다면 여전히 ARC에 문제가 있습니까? 어느 쪽이든 프로토콜을 사용하는 것이 더 나은 디자인입니다. –