Эффективная проверка и исправление нулевых объектов - PullRequest
0 голосов
/ 02 апреля 2012

Кто-нибудь нашел более эффективный способ проверить, является ли переменная ноль, а затем создать ее экземпляр?Я знаю, что классический способ - написать:

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 голосов
/ 02 апреля 2012

Если вы используете 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 - когда ваш компилятор их поддерживает.

0 голосов
/ 02 апреля 2012

ну это по сути то же самое, но

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