在 Objective-C 中传递 nil 对象指针

Passing nil object pointer in Objective-C

我创建了一个默认设置为 nil 的对象,然后将其作为参数包含在方法中。稍后我会检查对象是否仍然为零。该对象设置为在方法中更改,但结果仍然为零。我希望该方法能够改变 nil 对象。如果我用方法内部的代码替换方法调用,它会导致它不是 nil。

MyObject *objectTemp = nil;

[self methodCallWithObject:objectTemp];

if  (objectTemp == nil) NSLog(@"nil");
else NSLog(@"NOT nil");

// always results in "nil"

方法:

-(void) methodCallWithObject:(MyObject)objectTemp {

    objectTemp = [NSValue valueWithCGPoint:CGPointMake(5.3f, 2.6f)];

}

为了在方法外改变objectTemp,你必须传递一个指针objectTemp,这意味着methodCallWithObject实际上需要取一个指针指向一个指针:

-(void) methodCallWithObject:(MyObject **)objectTemp {
    *objectTemp = [NSValue valueWithCGPoint:CGPointMake(5.3f, 2.6f)];
}

(但是,methodCallWithObject 只是 return 一个新对象可能更有意义。)