从NSArray获得子阵列的最优雅方法是什么?

时间:2014-02-26 08:11:41

标签: objective-c cocoa-touch cocoa nsarray

在Python中,我可以像这样轻松获得一个子阵列

>> v1 = ['a', 'b', 'c', 'd']
>> v2 = v1[1:]
>> v2
['b', 'c', 'd']

如何优雅地在Objective-C中完成等效工作?

起初我虽然这种方法可以胜任:

- (void)getObjects:(id[])aBuffer range:(NSRange)aRange

但它将对象复制到缓冲区位置。我需要将它们添加回NSArray的另一个实例。另外,编译器抱怨保留/释放属性,我真的不习惯处理。

    id* objs;

    NSRange rng = NSMakeRange(1, [v1 count] - 1);

    [v1 getObjects:objs range:rng]; # Sending '__strong id *' 
                                    # to parameter of type '__unsafe_unretained id *'  
                                    # changes retain/release properties of pointer

那么,还有更优雅的方式吗?或者除了迭代objectEnumerator之外别无他法?

1 个答案:

答案 0 :(得分:10)

NSArray* v1 = @[@"a",@"b",@"c",@"d"];
NSRange rng = NSMakeRange(1,[v1 count]-1);
NSArray* v2 = [v1 subarrayWithRange:rng];