Ios 尝试通过转发调用获取NSDate
我有个问题 我有办法Ios 尝试通过转发调用获取NSDate,ios,exc-bad-access,Ios,Exc Bad Access,我有个问题 我有办法 - (void)forwardInvocation:(NSInvocation *)anInvocation { SEL sel = anInvocation.selector; NSString *prop = [self.class fieldNameForSelector:sel]; if (prop) { BOOL setter = [self isSetter:sel]; __unsafe_unretained id obj; if (se
- (void)forwardInvocation:(NSInvocation *)anInvocation {
SEL sel = anInvocation.selector;
NSString *prop = [self.class fieldNameForSelector:sel];
if (prop) {
BOOL setter = [self isSetter:sel];
__unsafe_unretained id obj;
if (setter) {
[anInvocation getArgument:&obj atIndex:2];
[self setValue:obj forKey:prop];
} else {
obj = [self valueForKey:prop];
[anInvocation setReturnValue:&obj];
}
} else {
[super forwardInvocation:anInvocation];
}
}
但如果我试图获取对象类NSDate或NSData,它在64位设备中不起作用。我得到EXC\u BAD\u访问代码=1
还有来自僵尸的信息
[__NSDate retain]: message sent to deallocated instance 0x171e00d50
但对于另一种类型的对象,它是有效的。我怎样才能解决这个问题?谢谢
obj
可以在赋值后立即解除分配,因为它是一个不安全的\u未恢复的
引用,所以-setReturnValue:
获取悬空指针作为参数
如果设置器路径不可避免地存在
不安全的\u未恢复的
(因为-[NSInvocation getArgument:atIndex:
可能无法在强引用下正常工作,感谢@Tommy注意到这一点),您可以使用强引用以不同的方式处理getter路径。obj
可以在分配后立即解除分配,因为它是一个不安全的\u未恢复的引用,所以-setReturnValue:
获取悬空指针作为参数
如果设置器路径不可避免地存在不安全(unretained)
(因为-[NSInvocation getArgument:atIndex:
可能无法与强引用一起正常工作,谢谢@Tommy注意到这一点),您可以使用强引用以不同的方式处理getter路径。我试着这样做@Nikolay从发布的答案和文档中,看起来getArgument:atIndex:
没有保留对象参数,因此如果他没有使用unsafe\u unrepaired
,那么编译器会盲目插入一个版本,而不保留该对象。我认为作者的问题可能是为了避免出现问题,他然后错误地处理了valueForKey:
路径。我试着像@Nikolay这样做,从发布的答案来看,从文档来看,getArgument:atIndex:
没有保留对象参数,因此,如果他没有使用不安全\u unrepaired
,那么编译器将盲目地插入一个版本,而不保留该对象。我认为作者的问题可能是为了避免出现问题,他随后错误地处理了valueForKey:
路径。