我做了一些 iOS 编程工作,我有一个带有 NSMutableArray
的 UIViewController
:
@property (nonatomic, retain) NSMutableArray* mutableTestArray;
...
@synthesize mutableTestArray;
在 viewDidLoad
中,我想调用此 UIViewController
实现内部的方法:
//- (void)aTestMethod:(NSMutableArray *)myMutableTestArray;
[self aTestMethod:self.mutableTestArray];
因此,我使用 NSMutableArray
调用该方法,它是 UIViewController
的实例变量。在这个方法中,我这样做:
myMutableTestArray = [NSMutableArray arrayWithCapacity:100];
//... looping & generating some objects and adding them to the array:
[myMutableTestArray adObject:myObject];
现在,我对其进行调试,并且在方法 myMutableTestArray
内一切正常。数组内有所有对象。但是离开这个方法实例变量mutableTestArray
是空的。
那么,问题出在哪里呢?有人有想法吗? 注意:我知道我可以使用 self.mutableTestArray 访问实例变量,然后一切都会好起来,而不是使用它作为参数,但我想知道我的代码出了什么问题。
预先感谢您并致以最诚挚的问候。
最佳答案
在 Objective-C 中参数是按值传递的。因此,您将创建指向该对象的指针的副本并将其传递到方法中。当您执行 myParam = ... new object ...;
时,会将副本重置为指向新位置,但对调用方中的原始副本没有影响。
(重申一下 - 您正在复制指针,而不是复制对象。)
要解决这个问题,请将您的测试方法声明为返回一个对象:
- (NSMutableArray *)aTestMethod;
然后,您可以简单地:
self.mutableTestArray = [whateverObject aTestMethod];
(由于您实际上并未使用首先传入的值,因此根本不需要参数)。
关于iphone - Objective-C:实例变量作为参数,但方法调用后实例变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746577/