目标C中的延迟加载

Roc*_*ker 20 iphone objective-c

我听说延迟加载技术对提高程序性能非常有帮助.我正在为iPhone开发游戏.我不确定如何在目标C中应用延迟加载.有人能告诉我这个例子吗?

提前致谢

Adr*_*ski 29

延迟加载的一般模式总是或多或少相同:

- (Whatever *)instance
{
    if (_ivar == nil)
    {
        _ivar = [[Whatever alloc] init];
    }
    return _ivar;
}
Run Code Online (Sandbox Code Playgroud)
  1. 在你的类中,添加你需要的类型的ivar,并在构造函数中将其初始化为nil;
  2. 为该ivar创建一个getter方法;
  3. 在吸气剂中,测试为零.如果是,请创建对象.否则,只需返回对它的引用.


nev*_*ing 6

以下是Core Data模板中延迟加载的示例:

- (NSManagedObjectModel *)managedObjectModel
{
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
    return managedObjectModel;
}
Run Code Online (Sandbox Code Playgroud)

第一次managedObjectModel被要求时,它是由代码创建的.在此之后的任何时间,它已经存在(!= nil)并且刚刚返回.这是延迟加载的一个例子.还有其他类型,例如延迟加载NIB文件(仅在需要时将它们加载到内存中).