답변
불행히도. 다차원있는 NSArray를 만들려면 : (이것은 C의 엄격한 상위 집합이기 때문에)
NSArray *multiArray = [NSArray arrayWithObjects:
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array], nil];
// Add a value
[[multiArray objectAtIndex:1] addObject:@"foo"];
// get the value
NSString *value = [[multiArray objectAtIndex:1] objectAtIndex:0];
을하지만, 당신은 당신이 한대로 배열을 선언 할 수는 당신의 필요에 맞는 경우, 목표 - C에서 C 코드를 사용할 수 있습니다 제안했다.
가비지 콜렉션을 사용하지 않는다면 각 배열을'multiArray'에 유출하게됩니다. 수정하려면 대신 [NSMutableArray array]를 사용하십시오. –
정말요? [NSMutableArray array]가 autoreleased NSMutableArray를 반환했다는 것을 이해했습니다. NSMutableArray는 추가되는 NSArray에 의해 유지됩니다. 당신이 옳다면 나는 롤을 통과하는 코드가 많기 때문에 definatly 그것을 볼 것입니다 – FatalMojo
예. 요점은 autoreleased 객체 _is_에 추가 된 배열에 의해 유지된다는 것입니다. 부모 배열이 해제되면 해당 내용도 해제됩니다. 배열에'[NSMutableArray new]'를 추가하면 retain-count는'2'가됩니다. 부모 배열이 해제 될 때 각 자식 요소의 보유 수는 여전히 '1'입니다. –
이 작업을 수행 할 수 있습니다
NSArray *array = @[@[@"0:0", @"0:1"],
@[@"1:0", @"1:1"]];
NSString *value = array[1][0];
나는이 "objectAtIndex"물건보다 훨씬 짧은 생각합니다.
하지만 사용이 조심 애플 LLVM 컴파일러 버전> = 4.0
이것은 분명히 현대적인 접근법입니다. –
컬렉션 또는의 TableView cellForRowAtIndexPath에서 다차원 배열에서 개체 삽입하려면 :
NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];
[dictionary setValue:[UIImage imageWithData:imageData] forKey:sectionRow];
이 컬렉션에서 다차원 배열에서 개체를 검색하려면 또는 TableView cellForRowAtIndexPath :
NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];
UIImage *cellImage = [dictionary valueForKey:sectionRow];
수행해야하는 작업은 무엇입니까? 아마도 당신이 해결하고있는 문제에 더 적합한 다른 접근법이있을 수 있습니다. – jlehr