我有一个接受指针参数指针的方法:
+(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];
防止第一种情况下提到的崩溃。
答案 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!";
}
}
}