2
내가 이렇게 내 UICollectionViewCell의 속성을 선언했습니다이 목표 C의 유지주기입니까?
@property (nonatomic, copy) void(^onSelection)(BOOL selected);
이 같은 -setSelected:
를 오버라이드 (override) :
- (void)setSelected:(BOOL)selected {
[super setSelected:selected];
if (self.onSelection != NULL) {
self.onSelection(selected);
}
}
그런 다음 -cellForItemAtIndexPath:
에 내가이
cell.onSelection = ^(BOOL selected) {
//the compiler is telling me this might be a retain cycle but i dont think so...
cell.tintColor = [UIColor redColor];
};
같은 구성이다 유지주기?
감사합니다.
당신은 대리인 방법에 대해 옳았습니다. 이 특별한 경우에 대해 더 궁금합니다. 제 추론은 다음과 같습니다. 두 객체가 서로에 대해 강력한 참조를 유지할 때 유지주기가 발생합니다. 이 특정 예제에서 셀은 자체에 대한 강력한 참조를 유지할 수 없습니다 ... 가능합니까? –
여기의 문제는 셀이 블록에 대한 강력한 참조를 유지하고 블록이 셀에 대한 강력한 참조를 유지한다는 것입니다. 그들은 명시 적으로'cell.onSelection = nil;'을 말할 때까지 서로를 공개하지 않을 것입니다. – Andy
두 개의 객체가 서로 유지되면, 명시 적으로 해제 될 때까지이주기를 깨뜨릴 수있는 방법이 없습니다. 생각을위한 음식 : 사람들이 비틀 거리는 전형적인 사이클은 '무효화'가 호출 될 때까지 사이클을 깨지 않는 'NSTimer'입니다. 따라서 dealloc이 호출되지 않기 때문에 'dealloc'에서 '무효화'를 호출하는 것은 불가능한 것처럼 보입니다. – Andy