Lazy loading in objective C

Viewed 13545

I heard lazy loading technique quite helpful to increase the performance of the programme. I am developing games for iPhone. I am not sure how is the way to apply lazy loading in objective C. Could anyone show me the example please?

Thanks in advance

4 Answers

The general pattern for lazy loading is always more or less the same:

- (Whatever *)instance
{
    if (_ivar == nil)
    {
        _ivar = [[Whatever alloc] init];
    }
    return _ivar;
}
  1. In your class, add an ivar of the type you need, and initialize that to nil in the constructor;
  2. Create a getter method for that ivar;
  3. In the getter, test for nil. If so, create the object. Otherwise, just return the reference to it.

Here's an example of lazy loading from the Core Data template:

- (NSManagedObjectModel *)managedObjectModel
{
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
    return managedObjectModel;
}

The first time the managedObjectModel is asked for, it is created by the code. Any time after that, it already exists (!= nil) and is just returned. That's one example of lazy loading. There are other kinds, such as lazy loading of NIB files (loading them into memory only when they're needed).

Related