실제로 문제가 있습니까? 또는 당신은 그 (것)들을 다만 예기하고 있는가?
동일한 백그라운드 스레드에서 UI 요소를 업데이트하려고 시도하지 않는 한 백그라운드 스레드에서 실행해도 문제가 발생하지 않습니다. UI 관련 작업을 주 스레드로 전달해야합니다. 예를 들어 (의사) : 당신이 배경 스레드에서 인스턴스 변수의 값을 변경하는 경우, 그것은 당신이 (다른 스레드를 방지하기 위해 self
에 동기화하는 것이 중요하다는
- (void)viewWillAppear:(BOOL)animated {
[self performSelectorInBackground:@selector(refreshTableView)];
[super viewWillAppear:animated];
}
- (void)refreshTableView {
// Where _listOfObjects is used to populate your UITableView
@synchronized(self) {
self._listOfObjects = [MyDataType findAllRemote];
}
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
주도 (위에서) 주 스레드와 마찬가지로) 업데이트 또는 설정 중에 _listOfObjects
배열의 개체에 액세스하지 못하게합니다. (또는 불완전한 객체를 가져올 수 있습니다.)
_listOfObjects
속성을 atomic
으로 선언하면 걱정하지 않아도됩니다. (의견 환영합니다.) 동기화 된 블록 이지만 속성 값을 재 할당하는 대신 하나의 영구 인스턴스를 변경하려는 경우 @property
선언에 관계없이 동기화 된 블록이 필요합니다. (예 : 정적 NSMutableArray에서 객체 추가/제거)
그 분석에 대해 많은 감사를드립니다, @ 척. ObjResource 문제의 근원 중 하나는 상속이 아닌 모든 카테고리를 사용한다는 것입니다. 상속을 해제하는 것이 좋지만, 카테고리에 변수를 넣을 수 없기 때문에 Obj-C에서 정말 제한적입니다. 어쨌든, 나는 이것을 너무 많이 만들 수 있다고 생각한다. "비즈니스"앱의 경우 블로킹, 동기식 콜은 아마 괜찮을 것이다. –
백그라운드 스레드에서 UIView 조각을 만드는 것이 안전합니까? 내가 거기에있는 동안 보이는 뷰에 첨부하지 않는 한? –