ARC 에서 MJrefresh 를 사용 할 때 tableView 순환 참조 에 주의해 야 합 니 다.
#pragma mark======
- (UITableView *)tableView
{
if (!_tableView) {
_tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 108, WIDTH, HEIGHT-108-44) style:UITableViewStylePlain];
_tableView.backgroundColor = [UIColor colorWithRed:220/255.0 green:222/255.0 blue:222/255.0 alpha:1];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.dataSource = self;
_tableView.delegate = self;
[_tableView registerNib:[UINib nibWithNibName:@"OldGoodsCell" bundle:nil] forCellReuseIdentifier:@"cell"];
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refersh)];
_tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
#pragma mark======
NSLog(@" ");
[_tableView.mj_footer endRefreshing];
}];
}
return _tableView;
}
상기 코드 에서 순환 인용 을 만 드 는 곳 은 여전히 가장 기본 적 인 block 입 니 다.즉,
_tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
#pragma mark======
NSLog(@" ");
[_tableView.mj_footer endRefreshing];
}];
_tableView 의 mjfooter 내 부 는 이 렇 습 니 다.self 는 입 니 다.tableView;
- (void)setMj_footer:(MJRefreshFooter *)mj_footer
{
if (mj_footer != self.mj_footer) {
// ,
[self.mj_footer removeFromSuperview];
[self addSubview:mj_footer];
//
[self willChangeValueForKey:@"mj_footer"]; // KVO
objc_setAssociatedObject(self, &MJRefreshFooterKey,
mj_footer, OBJC_ASSOCIATION_ASSIGN);
[self didChangeValueForKey:@"mj_footer"]; // KVO
}
}
그런데 저희 가 블 락 에 이렇게 썼어 요.
[MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
[_tableView.mj_footer endRefreshing];
}]
분명 해,만 들 었 어tableView 의 순환 인용,이어서 우리 의tableView 는 strong 형식 입 니 다.순환 참조 가 가 져 온 결 과 는 소속 viewController 대상 이 풀 리 지 않 아 dealloc 가 실행 할 수 없습니다.우 리 는 이런 상황 을 깨 야 한다.깨 뜨리 기만 하면table View 의 순환 참조 가 성공 하 였 습 니 다.
그래서 view Controller 의 self 를 약 한 타 입의 weak Self 로 바 꿔 야 합 니 다. ,(변 하지 않 습 니 다.이 걸 보 세 요weak __typeof(&*self)weakSelf = self;할 수 있 습 니 다.무시 하 십시오)즉,전체 줄 코드 가 바 뀌 었 습 니 다. [weakSelf.tableView.mj_footer endRefreshing];
이렇게 되면 mj 에 게 도footer 의 block 에 나 타 났 어 요.
[weakSelf.tableView.mj_footer endRefreshing]; weak Self 는 모두 약 한 유형 입 니 다.안의 tableView 도 이에 따라 방출 됩 니 다.tableView 의 순환 인용 도 해결 되 고 순환 인용 이 해결 되 며 dealloc 방법 도 정상 으로 돌아 갑 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
TIL - 2021.05.13 (Thu)야곰 캠프 방학 중 TIL Notion -> Velog 이전하면서 복습하기! 일단 뷰의 재사용을 위해서 재사용되는 cell에 남아있는 text, image 등을 털어내야 한다 이미 구현되어 있는 prepareForR...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.