Computer Science Large Practical:
Arrays in Objective-C
Stephen Gilmore
School of Informatics
Friday 2nd November, 2012
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 1 / 16
Experience report
The Desktop Team, in the University’s Information Servicesdepartment have asked for feedback from you regarding yourexperiences (good or bad!) with Xcode in the Main Library IS OpenAccess Lab.
This will help inform their plans for future academic years.
What has been your experience?
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 2 / 16
Programming with arrays in Objective-C
shot 2012-11-01 at 15.49.03.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 3 / 16
Inspecting an array
shot 2012-11-01 at 15.48.54.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 4 / 16
The XML representation
shot 2012-11-01 at 15.49.50.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 5 / 16
Sorting an array
shot 2012-11-02 at 09.12.09.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 6 / 16
The sorted array
shot 2012-11-01 at 15.51.38.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 7 / 16
The output in the console
shot 2012-11-01 at 15.57.19.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 8 / 16
Everything OK? What about “Build and Analyze”?
shot 2012-11-02 at 09.02.59.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 9 / 16
Handling arrays (1/2)
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
init];
NSLog(@"Hello, arrays!");
NSArray * myArray = [[NSArray alloc]
initWithObjects:@"foo",@"bar",@"baz",nil];
for(NSString * myStr in myArray) {
NSLog(@"-- %@", myStr);
}
[myArray writeToFile:@"myArray.plist" atomically:YES];
NSArray *sortedArray =
[myArray sortedArrayUsingSelector:@selector(
caseInsensitiveCompare:)];
[sortedArray writeToFile:@"sortedArray.plist"
atomically:YES];
for(NSString * myStr in sortedArray) {
NSLog(@"---- %@", myStr);
}
[pool drain];
return 0;
}
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 10 / 16
Handling arrays (2/2)
NSArray *sortedArray = [myArray
sortedArrayUsingSelector:@selector(
caseInsensitiveCompare:)];
[sortedArray writeToFile:@"sortedArray.plist"
atomically:YES];
for(NSString * myStr in sortedArray) {
NSLog(@"---- %@", myStr);
}
[pool drain];
return 0;
}
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 11 / 16
Object allocation and arrays
Arrays in Objective-C are not generic arrays: they can containdifferent kinds of objects.
The nil value at the end is a terminator, signalling the end of thearray.
You can release an object as soon as you add it to an array becausethe array allocates its own memory for the object by calling retain onall objects which are added to it.
arrayWithObjects auto releases from memory so you do not haveto release the array yourself.
If we replace [NSArray alloc] initWithObjects witharrayWithObjects then this should solve our memory leak.
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 12 / 16
“Build and Analyze” finds no potential leaks now
shot 2012-11-02 at 09.18.34.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 13 / 16
Mutable arrays
NSArray objects are not mutable so we cannot update their contents.
To have an array which we can update we should useNSMutableArray.
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 14 / 16
Declaring and using mutable arrays
shot 2012-11-02 at 09.59.55.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 15 / 16
Output from the program
shot 2012-11-02 at 10.00.07.png
Stephen Gilmore (School of Informatics) Computer Science Large Practical Friday 2nd November, 2012 16 / 16
Top Related