有没有人找到一种更有效的方法来检查变量是否为零,然后实例化它?我知道经典的方法是写:
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;
}
答案 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泛型 - 当你的编译器支持它们时。