我想扩展一个带有类似选择器的队列的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无关。
答案 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;
}