在 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 一个新对象可能更有意义。)
我创建了一个默认设置为 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 一个新对象可能更有意义。)