2014-10-12 1 views
1

나는이 질문은 매우 바보 그래서 아이폰 OS 개발 초보자,하지만 나는 다음과 같은 코드가 어떻게 작동하는지 알아내는 힘든 시간을 수행ios tableview에서 섹션이 NSIndexSet 인 이유는 무엇입니까?

-(void)controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type{ 

    if (type==NSFetchedResultsChangeDelete) { 
     [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 
} 

NSIndexSet 여기에 섹션을 대표합니까? 또한이 예제에서 sectionIndex은 숫자 일 뿐이며 NSIndexSet은 하나의 숫자로 된 집합입니까? 숫자가 하나뿐이라면 왜 int을 사용하면 되나요?

감사합니다.

답변

0

NSIndexSet은 데이터 구조에 대한 인덱스를 저장하기 위해 최적화 된 고유 한 부호없는 정수의 불변 인 컬렉션입니다. 메서드 deleteSections:은 NSIndexSet을 매개 변수로 취합니다. 프로그래머가 삭제할 인덱스 집합을 전달할 수 있기 때문입니다. 이 경우 하나의 행만 삭제하여 NSIndexSet을 하나의 멤버로 전달합니다.

추가 정보 : NSIndexSet documentation, deleteSections: method documentation.

5

먼저 NSIndexSet은 무엇입니까? NSIndexSet은 많은 정수가 연속적 일 수있는 고유 한 정수 컬렉션을 표현하는 매우 효율적인 방법입니다.

[1,2,3,4,5,10,11,12,13,14,15]을 나타내고 싶다고 가정 해 보겠습니다. 이 표현은 범위 인, 즉 NSMakeRange(1,5)NSMakeRange(10,6)을 함께 사용하는 경우 얻을 수있는 것입니다. 으로 표현하면 더 단단하게 표현할 수 있습니다.

그들은 NSNumber의 배열을 요청할 수 있었지만 NSIndexSet을 사용하면 모든 항목의 고유성을 보장합니다 (집합). 따라서 저장 및 계산의 효율성을 극대화 할 수 있습니다.

은 Int 배열을 요청할 수 없습니다. NSArray에 Int를 넣을 수 없기 때문에 객체 여야합니다. 다시 말하지만 NSIndexSet의 효율성이 높아집니다. NSNumber의 배열은이 정보를 전달하는 데 매우 비효율적 인 방법입니다.)

이제 특정 질문에 대해 : 은 단 하나의 숫자 여야합니다! 이름을 적어 두십시오 : deleteSections:. 결국 "s"를 보시나요? 한 명령에서 여러 섹션을 삭제할 수 있습니다. 사실이 경우에 이 발생하면이 삭제되는 것은 하나의 섹션 만 삭제하는 것입니다. 그리고 효율성이 손실되지 않습니다.

관련 문제