我正在研究Aaron Hillegass的书,特别是彩票的例子.我对这个-setEntryDate:
方法有疑问; 为什么我要保留date
?该程序仍然有效而不保留它.
-(void)setEntryDate:(NSCalendarDate *)date {
[date retain];
[entryDate release];
entryDate = date;
}
Run Code Online (Sandbox Code Playgroud)
但这仍然可行:
-(void)setEntryDate:(NSCalendarDate *)date {
entryDate = date;
}
Run Code Online (Sandbox Code Playgroud)
那么为什么我必须保留date
然后发布entryDate
呢?
它现在有效,但是如果你正在编写一个更大的程序,那么在未来的某个不确定的地方,有date
可能被所谓的对象指向释放setEntryDate
.如果发生这种情况,它将在整个程序的其余部分失效.您将在类中保留此对象,因为该类现在拥有对该对象的引用,并需要指明该对象.通过执行此操作,即使要调用的任何类setEntryDate
都要释放date
,您的类仍将保持对它的有效引用.此外,这不仅仅是您正在编写的常规旧方法.这是一个setter,它负责在它所属的类上设置一个实例变量.如果您正在编写非setter方法,则可能不必保留参数.我想说的是保留方法参数并不总是必要的; 它就是在这种情况下(并且几乎所有的setter都处理非原始类型).
这就是所谓的"引用计数",并在伟大的详细解释在这里.现在,既然你刚开始学习,不要担心阅读.当您开始使用内存管理进入更复杂的场景时,该指南是非常有价值的阅读内容.
归档时间: |
|
查看次数: |
1763 次 |
最近记录: |