gpt4 book ai didi

ios - objc_getAssociatedObject 突然开始返回 nil

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

我有一个 NSURLConnection 类别,我使用关联对象扩展该类以保留对我的自定义类的引用,这样我可以稍后在委托(delegate)时在其他上下文中获取并将调用转发到实际目标。这样我就可以在运行时的某些点修改所需的数据。

但是由于某种原因,当一切都正常工作时,objc_getAssociatedObject 突然返回 nil,这意味着我没有取回我的关联对象,整个过程停止了。

我的代码:

static void* KEY_CONNECTION_MYCLASS;

static MyClass* GetConnectionMyClass(NSURLConnection* connection)
{
return (MyClass*)
objc_getAssociatedObject(connection, KEY_CONNECTION_MYCLASS);
}

static void AttachConnectionMyClass(NSURLConnection* connection, MyClass* myClass)
{
objc_setAssociatedObject(connection,
&KEY_CONNECTION_MYCLASS,
myClass,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

以及我如何从其他静态函数访问上述函数。

当我设置关联对象时:

NSURLConnection* connection = (NSURLConnection*) self;
AttachConnectionMyClass(connection, myClass);

获取关联对象:

NSURLConnection* connection = (NSURLConnection*)self;
MyClass* myClass = GetConnectionMyClass(connection);
if (myClass)
{
NSLog(@"MyClass is NOT NIL");
}
else
{
NSLog(@"MyClass is NIL");
}

结果总是“MyClass is NIL”。正如我提到的那样,它工作正常,并且没有任何原因就停止了。

你怎么看?

最佳答案

您在设置和获取对象时使用了不同的键。

在设置的时候注意&,获取的时候没有。您应该在这两种情况下使用。

一个好的做法是像这样定义键:

static void* KEY_CONNECTION_MYCLASS = &KEY_CONNECTION_MYCLASS;

这样,您的拼写错误就没有关系了。但纠正拼写错误是件好事。

关于ios - objc_getAssociatedObject 突然开始返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24765364/

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