gpt4 book ai didi

objective-c - Cocoa 为什么我必须保留和释放一个函数参数?

转载 作者:行者123 更新时间:2023-12-03 17:28:02 25 4
gpt4 key购买 nike

我正在阅读 Aaron Hillegass 的书,特别是彩票示例。我对 -setEntryDate: 方法有疑问;为什么我必须保留日期?该程序仍然可以运行,无需保留。

 -(void)setEntryDate:(NSCalendarDate *)date {
[date retain];
[entryDate release];
entryDate = date;
}

但这仍然可以正常工作:

-(void)setEntryDate:(NSCalendarDate *)date {
entryDate = date;
}

那么为什么我必须保留 date 然后释放 entryDate 是正确的?

最佳答案

它目前有效,但如果您正在编写一个更大的程序,则有可能在未来某个不确定的时刻,对象 date指向的点将由调用 setEntryDate 的人释放。如果发生这种情况,它将在整个计划的其余部分中失效。您在类中保留该对象是因为该类现在拥有对该对象的引用并且需要指出这一点。通过这样做,即使任何类调用 setEntryDate即将发布 date ,您的类仍将保留对它的有效引用。另外,这不仅仅是您正在编写的常规旧方法。这是一个 setter,它负责在其所属的类上设置实例变量。如果您正在编写非 setter 方法,则可能不必保留参数。我想说的是,保留方法参数并不总是必要的;正是在这种情况下(几乎所有处理非原始类型的 setter 都如此)。

这称为“引用计数”,并有详细解释 here 。现在,由于您才刚刚开始学习,所以暂时不用担心阅读该内容。当您开始进入更复杂的内存管理场景时,该指南是非常有值(value)的阅读内容。

关于objective-c - Cocoa 为什么我必须保留和释放一个函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/875391/

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