首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否通过取消引用来更改NSArray中的值?

是否通过取消引用来更改NSArray中的值?
EN

Stack Overflow用户
提问于 2009-11-24 03:00:47
回答 5查看 10.1K关注 0票数 6

我在objective-c中遇到了一个与数组中的指针相关的问题。

我尝试做的是获取NSArray中的指针,将它们传递给一个方法,然后将返回的值赋回到原始指针(属于数组的指针)。

根据我对C和C++的了解,通过取消引用数组中的指针,我应该能够更改它们所指向的值……下面是我正在使用的代码,但它不起作用( value phone指向根据NSLog输出永远不变)。

代码语言:javascript
代码运行次数:0
运行
复制
NSArray *phoneNumbers = [phoneEmailDict objectForKey:@"phone"];
    for (NSString* phone in phoneNumbers) {
        (*phone) = (*[self removeNonNumbers:phone]);
        NSLog(@"phone:%@", phone);
    }

下面是我将NSString*传递给的方法签名:

代码语言:javascript
代码运行次数:0
运行
复制
- (NSString*) removeNonNumbers: (NSString*) string;

如您所见,我使用变量phone遍历了phoneNumbers中的每个NSString*。我将电话传递给removeNonNumbers:,它返回修改后的NSString*。然后,我取消对从removeNonNumber返回的指针的引用,并将该值赋给phone。

如你所知,我可能不太理解Objective-C对象。我非常确定这在C++或C中可以工作,但我不明白为什么它不能在这里工作!提前感谢您的帮助!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-24 03:06:16

是的,那是行不通的。你需要一个NSMutableArray

代码语言:javascript
代码运行次数:0
运行
复制
NSMutableArray * phoneNumbers = [[phoneEmailDict objectForKey:@"phone"] mutableCopy];
for (NSUInteger i = 0; i < [phoneNumber count]; ++i) {
  NSString * phone = [phoneNumbers objectAtIndex:i];
  phone = [self removeNonNumbers:phone];
  [phoneNumbers replaceObjectAtIndex:i withObject:phone];
}
[phoneEmailDict setObject:phoneNumbers forKey:@"phone"];
[phoneNumbers release];
票数 13
EN

Stack Overflow用户

发布于 2009-11-24 03:09:02

您不能取消引用Objective-C对象变量。它们总是指针,但是你应该把它们当做原子值来对待。您需要改变数组本身以包含您正在生成的新对象。

票数 4
EN

Stack Overflow用户

发布于 2009-11-24 03:04:11

NSArray不是C/C++样式的数组。它是一个Objective-C对象。您需要使用NSArray类的instance methods来对其执行操作。

在Objective-C中,您永远不会“取消引用”对象指针来设置它的值。

此外,您使用的是所谓的Fast Enumeration,它不允许发生突变。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1785253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档