gpt4 book ai didi

ios - 尝试通过 forwardInvocation 获取 NSDate

转载 作者:行者123 更新时间:2023-11-28 19:01:22 29 4
gpt4 key购买 nike

我有一个问题。

我有方法

- (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_BAD_ACCESS code=1

还有来自 NSZombie 的消息

[__NSDate retain]: message sent to deallocated instance 0x171e00d50

但对于另一种类型的对象,它是有效的。我该如何解决这个问题?谢谢

最佳答案

obj 可以在分配后立即解除分配,因为它是一个 unsafe_unretained 引用,所以 -setReturnValue: 获取悬空指针作为参数。

如果 unsafe_unretained 对于 setter 路径是不可避免的,(因为 -[NSInvocation getArgument:atIndex:] 可能无法在强引用下正常工作,感谢@Tommy 注意到这一点) ,您可以通过强引用以不同方式处理 getter 路径。

关于ios - 尝试通过 forwardInvocation 获取 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25009990/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com