为什么我的代码返回null?

时间:2013-09-19 11:19:03

标签: ios objective-c

我想扩展一个带有类似选择器的队列的NSMutableArray,例如

- (id)dequeue {
    id obj = nil;
    if ([self count] > 0) {
        id obj = [self objectAtIndex:0];
        if (obj != nil) {
            [self removeObjectAtIndex:0];
        }
    }
    return obj;
}

问题是我启用了ARC,obj指向的数据在removeObjectAtIndex:处释放,因此dequeue始终返回null。

解决这个问题的优雅方法是什么?或者我的方法是完全错误的?

修改的 这是由一个错字引起的,与ARC无关。

1 个答案:

答案 0 :(得分:5)

您有一个简单的范围问题。内部obj变量与您返回的变量不同。将您的代码更改为此代码,它应该可以正常工作

- (id)dequeue {
    id obj = nil;
    if ([self count] > 0) {
        obj = [self objectAtIndex:0]; // removed "id" on this line since it created a new variable that and didn't assign to the one you were returning.
        if (obj != nil) {
            [self removeObjectAtIndex:0];
        }
    }
    return obj;
}