Objective C指向指针的指针 - 如何将传递的nil与未初始化的变量set设置为nil

时间:2017-09-12 13:35:30

标签: objective-c pointers

我有一个接受指针参数指针的方法:

+(void)someMethod:(NSString*_Nullable*_Nullable)parsed;

现在,如果我调用此方法并传递" nil"作为参数,然后我在方法中进行取消引用,如:

*parsed = soemthing;

我得到崩溃BAD Access。现在的问题是,如何构建条件来区分传递" nil" vs传递未启动的变量,如:

NSString* s; // this is technically nil too, but dereference works and doesn't crash
[someObj someMethod:&s];

防止第一种情况下提到的崩溃。

1 个答案:

答案 0 :(得分:2)

解决方案相对简单,你永远不应该传递未初始化的变量。考虑这样做:

NSString *s = nil;
[someObj someMethod:&s];

注意& s,因为你声明someMethod需要一个NSString **。通过做&解析,将始终定义解析,因为变量显然存储在存储器中的某处。存储在* parsed中的值将初始化为nil。然后,您应该能够执行以下操作:

+(void)someMethod:(NSString* _Nullable *_Nullable)parsed {
    if( NULL != parsed ) {
        if( nil == *parsed ) {
            *parsed = @"Our variable *s will now be set!";
        }
    }
}