gpt4 book ai didi

objective-c - 关于 NSMutableArray/NSArray 类簇,可以安全地假设什么?

转载 作者:行者123 更新时间:2023-12-03 17:32:54 24 4
gpt4 key购买 nike

我知道你不应该用它来决定是否更改数组:

if ([possiblyMutable isKindOfClass:[NSMutableArray class]])

但假设我正在编写一个方法,需要返回一个 NSMutableArrayNSArray,具体取决于 possibleMutable 的可变性。使用我的方法的类已经知道更改返回的数组是否可以接受。是否可以接受更改返回的数组与是否可以接受更改 possibleMutable 直接相关。

在这种特定情况下,这段代码安全吗?在我看来,如果更改数组是可接受的,但我们不小心得到了一个可变数组,那也没关系,因为使用我的方法的类不会尝试更改它。如果更改数组可以接受的,那么我们总是会得到possibleMutable作为NSMutableArray(尽管这个这是我不太清楚的部分)。

那么...安全与否?替代品?

最佳答案

没有。一点也不安全。

如果你这样做:

NSMutableArray * ma = [NSMutableArray arrayWithObject:@"foo"];
NSArray * aa = [NSArray arrayWithObject:@"foo"];

NSLog(@"Mutable: %@", [ma className]);
NSLog(@"Normal: %@", [aa className]);

然后你会得到:

2010-04-05 13:17:26.928 EmptyFoundation[55496:a0f] Mutable: NSCFArray
2010-04-05 13:17:26.956 EmptyFoundation[55496:a0f] Normal: NSCFArray

你也不能这样做:

NSLog(@"Mutable add: %d", [ma respondsToSelector:@selector(addObject:)]);
NSLog(@"Normal add: %d", [aa respondsToSelector:@selector(addObject:)]);

因为此日志:

2010-04-05 13:18:35.351 EmptyFoundation[55525:a0f] Mutable add: 1
2010-04-05 13:18:35.351 EmptyFoundation[55525:a0f] Normal add: 1

保证拥有可变数组的唯一方法是采用现有数组的 -mutableCopy ,或者函数/方法的返回类型保证数组是可变的。

关于objective-c - 关于 NSMutableArray/NSArray 类簇,可以安全地假设什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com