1 / 9

Objective-C Lecture 5

Objective-C Lecture 5. Memory management Memory management in OC is semi-automatic: The programmer must allocate memory for objects either a) explicitly (alloc) or b) indirectly using a convenience constructor No need to deallocate. Allocation.

pierce
Download Presentation

Objective-C Lecture 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Objective-C Lecture 5 Memory management Memory management in OC is semi-automatic: The programmer must allocate memory for objects either a) explicitly (alloc) or b) indirectly using a convenience constructor No need to deallocate

  2. Allocation Allocation happens through the class method alloc. The message ‘alloc’ is sent to the class of the requested object. Alloc is inherited from NSObject. Every alloc creates a new instance (=object) [HelloWorld alloc]; The class creates the object with all zeros in it and returns a pointer to it. HelloWorld *p = [HelloWorld alloc]; The pointer p now points to the new instance. Now we send messages to the instance through p.

  3. The reference counter Every instance has a so called reference counter. It counts how many references are retaining the object. The counter is 1 after allocation. It does not count how many references exist to the object (examples in the lecture) Sending the retain message to the object increases the reference counter by 1. Sending the release message decreases the reference counter by 1.

  4. reference counter = retain counter • When the reference counter reaches zero, the object is automatically deallocated. The programmer does not deallocate. • The programmer only does: alloc retain release

  5. Rules for memory management • The method that does an alloc or a retain must also do a release, it must maintain the balance between: (alloc or retain) and (release) • If a method does alloc and returns a pointer to the created object then the method must do an autorelease instead of release. The calling code can do (retain – release) but this is not a must.

  6. Autorelease pool • For outorelease to work the programmer must create an autorelease pool, using: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; • When Cocoa is used then the autorelease pool is created automatically – the programmer does not need to do it. • To release the pool and all objects in it, do: [pool release];

  7. Convenience Constructors • This is a class method that allocates and initializes an object. The programmer is neither doing alloc nor init. • Example: +(id)studentWithName :(NSString*)name AndGpa:(float)gpa { id newInst = [[self alloc]initStudent:name :gpa]; return [newInst autorelease]; }

  8. Convenience Constructors • Essential: the method sends alloc to ‘self’ which is the Student class object • Essential: the method autoreleases the instance, because it returns a pointer to the created instance • Not essential: This example uses an existing initializer, it could use something else or initialize the Student data directly

  9. Convenience Constructors Calling the convenience constructor: id stud = [Student studentWithName:@"Johnnie" AndGpa: 3.8]; The message is sent to the Student class object and returns a pointer to it, the pointer is assigned to stud The calling code does neither alloc nor init An autorelease pool must be in place

More Related