gpt4 book ai didi

ios - 向 __weak 对象发送消息?

转载 作者:技术小花猫 更新时间:2023-10-29 10:21:51 27 4
gpt4 key购买 nike

如果我向弱对象发送消息会怎样?发送消息是否拥有该对象并将其保存在内存中直到返回?

我在想这个模式:

__weak MyObject *weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf doSomeAction];
});

假设 weakSelf 在发送消息时不为零,它可能会在 doSomeAction 工作时被释放,或者它是否保证在 doSomeAction< 之前保持有效 返回?

最佳答案

来自Clang ARC documentation :

Reading occurs when performing a lvalue-to-rvalue conversion on an object lvalue.

  • For __weak objects, the current pointee is retained and then released at the end of the current full-expression. This must execute atomically with respect to assignments and to the final release of the pointee.

向弱引用发送消息会对变量执行左值到右值的转换,这意味着弱引用的值将被保留,然后在当前完整表达式(基本上是语句)的末尾释放。它基本上等同于分配一个作用域仅持续当前语句的强变量,然后向该强变量发送消息。

这里的要点是,如果你想向一个弱变量发送一次消息,并且再也不会接触它,并且你不关心在弱引用结束的情况下评估方法参数的副作用nil,然后直接给弱引用发消息。但是,如果您需要两次引用弱引用(在单独的语句中),或者评估参数的副作用确实很重要,那么您应该分配给一个强变量并测试非 nil在继续之前。

关于ios - 向 __weak 对象发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033691/

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