有效地检查和修复空对象

时间:2012-04-02 04:17:19

标签: objective-c instantiation null performance

有没有人找到一种更有效的方法来检查变量是否为零,然后实例化它?我知道经典的方法是写:

if (myObject == nil) {
    //instantiate and do other stuff
}

或者

if (!myobect) { 
    //do stuff
}

根据我的喜好,这似乎过于泛滥,特别是如果我不得不多次这样做。

编辑:有了一丝灵感,会有这样的工作吗?

-(id)instantiateIfObjectIsNull:(id)object withClass:(Class*)class {
    if (object == nil) {
        object = [[Class alloc]init];
    }
    return object;
}

2 个答案:

答案 0 :(得分:0)

好吧它基本上是一样的但是

   if (!myobject) {
     .....
   }

答案 1 :(得分:0)

如果你正在使用ObjC ++,你可以从这个角度来看待它:

#import <Foundation/Foundation.h>

template < typename T >
void InitIfNil(T*& obj) {
    if (nil == obj)
        obj = [T new];
}

template < typename T >
void TryIt() {
    T * obj(nil);
    NSLog(@"before: %@", obj);
    InitIfNil(obj);
    NSLog(@"after: %s : %@", object_getClassName(obj), obj);
    [obj release];
}

int main(int argc, const char* argv[]) {
    @autoreleasepool {
        TryIt<NSArray>();
        TryIt<NSString>();
        TryIt<NSMutableSet>();
    }
    return 0;
}

这也可以用宏来完成......我认为这不会有助于提高可读性。

第三种选择是C11泛型 - 当你的编译器支持它们时。