iphone - Objective-C:实例变量作为参数,但方法调用后实例变量为空

标签 iphone objective-c

我做了一些 iOS 编程工作,我有一个带有 NSMutableArrayUIViewController:

@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/

相关文章:

objective-c - 如何在 ObjectiveC 类中存储函数指针?

ios - 在从 block 运行的方法中对 self 的强引用

iphone - 如何在 PDFPage 的屏幕上突出显示、添加注释和捕获/共享文本

ios - NSOperationQueue 的取消在 swift 中不起作用

iphone - 如何转换 NSString 中的日期时间格式?

iphone - 在 iPhone 中使用 html 查找当前位置

iphone - 当用户旋转到横向时全屏播放视频,然后在视频停止时以编程方式旋转回来

ios - Objective-C 中的渐进式下载和视频播放

ios - 如何获取 UIView 当前位置?

iOS UIActivityViewController 使用 UIActivityItemProvider "forgets"项