gpt4 book ai didi

iphone - objc_msgSend() 错误消息,为什么?

转载 作者:行者123 更新时间:2023-12-03 20:57:43 26 4
gpt4 key购买 nike

我在我的应用程序中收到了“objc_msgSend()” fatal error 消息,这要感谢 Hamster Emporium我可以弄清楚发生了什么。

现在我找到了“问题”和“解决方案”,但我不明白为什么我的问题确实是一个问题。

这是场景:

Object_A --> Object_B --> Object_C

“-->”符号代表“创建”操作。Object_C 类如下所示:

@interface Class_C {
NSArray *items;
}
@property (nonatomic, retain) NSArray *tems;
@end

属性“items”是通过“setItems”方法在 Object_B 中设置的:

- (void)setItems:(NSArray *)items_ {
if (object_B) {
[object_B.taskItems release];
object_B.taskItems = items_;
}
[super setItems:items_];
}

现在,如果我按原样使用此方法,我会收到亵渎的“objc_msgSend()”错误,但如果我评论发布行,一切都会顺利。

注意:释放行中的retainCount为0,但是释放执行没有问题

最佳答案

您收到该错误是因为 taskItems 成员变量被释放了两次。无需手动释放 taskItems,因为使用点语法会自动处理它。

这一行:

object_B.taskItems = items;

调用 taskItems 的属性访问器,其中旧值会在保留(或复制,具体取决于属性定义)之前自动释放。

Cocoa 内存管理的一个非常好的一般规则是,如果您创建了一个对象(通过 alloc/init 或通过复制),则应该仅释放该对象。释放 object_B.taskItems 将违反该规则。

关于iphone - objc_msgSend() 错误消息,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3813394/

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