Skip to main content
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 Services
         department have asked for feedback from you regarding your
         experiences (good or bad!) with Xcode in the Main Library IS Open
         Access 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




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   3 / 16
Inspecting an array




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   4 / 16
The XML representation




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   5 / 16
Sorting an array




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   6 / 16
The sorted array




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   7 / 16
The output in the console




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   8 / 16
Everything OK? What about “Build and Analyze”?




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];

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 contain
         different kinds of objects.
         The nil value at the end is a terminator, signalling the end of the
         array.
         You can release an object as soon as you add it to an array because
         the array allocates its own memory for the object by calling retain on
         all objects which are added to it.
         arrayWithObjects auto releases from memory so you do not have
         to release the array yourself.
         If we replace [NSArray alloc] initWithObjects with
         arrayWithObjects 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




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 use
         NSMutableArray.




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   14 / 16
Declaring and using mutable arrays




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   15 / 16
Output from the program




Stephen Gilmore (School of Informatics)   Computer Science Large Practical   Friday 2nd November, 2012   16 / 16