改变数组中的对象

时间:2014-12-03 01:33:27

标签: objective-c arrays reference nsmutablearray

我有ObjectManager类型的对象,其属性为NSMutableArray,我们称之为_objArr_objArr充满了MyObject类型的对象。以下是MyObject

typdef NS_ENUM(NSInteger, ObjectStatus)
{
    ObjectStatusZero = 0,
    ObjectStatusOne = 1, 
    ObjectStatusTwo = 2
}

@interface MyObject : NSObject    

@property (nonatomic, strong) NSDate *date;
@property (nonatomic, assign) ObjectStatus status;

@end

此问题涉及两种方法:userInitiatedMethodtimerInitiatedMethod:。首先,userInitiatedMethod被称为:

- (void)userInitiatedMethod
{
    MyObject *obj = _objArr[0];
    obj.date = [NSDate dateWithHoursFromNow:1000];
    obj.status = ObjectStatusTwo;
}

几秒钟后,计时器开火:

- (void)timerInitiatedMethod:(NSTimer*)timer
{
    MyObject *obj = _objArr[0];
    // do stuff with object
}

计时器是使用ObjectManger的{​​{1}}方法创建的:

init

计时器启动方法会从if (_pruneTimer) { [_pruneTimer invalidate]; _pruneTimer = nil; } PULLog(@"starting pruning timer"); _pruneTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(p_pruneExpiredObjs) userInfo:nil repeats:YES]; 中删除对象,具体取决于_objArr是否已通过,这就是我发现错误的方法。在上述两种方法中设置断点,我首先调用obj.date并正确设置对象。调用userInitiatedMethod时,我会检查我的obj。只有timerInitiatedMethod:是新设置的值,obj.status是第一个方法更改之前的原始值。我已经验证了obj.date实例的内存地址对于这两种方法都是相同的。为什么我的原始值会被正确保存,而不是MyObject的引用?

0 个答案:

没有答案