我有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
此问题涉及两种方法:userInitiatedMethod
和timerInitiatedMethod:
。首先,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
的引用?