To answer your question while retaining the plist data structure, you could simply do something like the following:
NSArray *rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"your-plist" ofType:@"plist"]];
int numItems = [rootArray count];
NSMutableArray *titles = [NSMutableArray arrayWithCapacity:numItems];
NSMutableArray *subtitles = [NSMutableArray arrayWithCapacity:numItems];
NSMutableArray *images = [NSMutableArray arrayWithCapacity:numItems];
for (NSArray *itemData in rootArray) {
[titles addObject:[itemData objectAtIndex:0]];
[subtitles addObject:[itemData objectAtIndex:1]];
[images addObject:[itemData objectAtIndex:2]];
}
However, I would advise you to use a structure like:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>title</key>
<string>Title 1</string>
<key>subtitle</key>
<string>Subtitle 1</string>
<key>image</key>
<string>image1.png</string>
</dict>
<dict>
<key>title</key>
<string>Title 2</string>
<key>subtitle</key>
<string>Subtitle 2</string>
<key>image</key>
<string>image2.png</string>
</dict>
</array>
</plist>
At which point you could use the more explicit code as follows:
NSArray *rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"your-plist" ofType:@"plist"]];
int numItems = [rootArray count];
NSMutableArray *titles = [NSMutableArray arrayWithCapacity:numItems];
NSMutableArray *subtitles = [NSMutableArray arrayWithCapacity:numItems];
NSMutableArray *images = [NSMutableArray arrayWithCapacity:numItems];
for (NSDictionary *itemData in rootArray) {
[titles addObject:[itemData objectForKey:@"title"]];
[subtitles addObject:[itemData objectForKey:@"subtitle"]];
[images addObject:[itemData objectForKey:@"image"]];
}