我试图实现一个名为OCCCalendarView的gitHub项目,但看起来项目是在弧前编写的,我想知道如何重构这个方法,以便我可以在iOS 7中使用它&安培; 8.如何摆脱保留&版本
- (void)setStartDate:(NSDate *)sDate
{
if(startDate)
{
[startDate = release];
startDate = nil;
}
startDate = [sDate retain];
[calView setStartDate:startDate];
}
答案 0 :(得分:1)
只是说:您复制的代码不安全。如果你调用myObject.date = myDate; myObject.date = myDate;两次,事情会出错。但没关系,正确的代码是
- (void)setStartDate:(NSDate *)sDate
{
startDate = sDate;
calView.startDate = startDate;
}
你可以写
- (void)setStartDate:(NSDate *)sDate
{
if (startDate != sDate)
{
startDate = sDate;
calView.startDate = startDate;
}
}
看起来您复制的代码使用名为“startDate”的实例变量。这是一个非常糟糕的做法。你应该把它改成_startDate;您可能需要更改@synthesize语句。然后代码是
- (void)setStartDate:(NSDate *)sDate
{
if (_startDate != sDate)
{
_startDate = sDate;
calView.startDate = _startDate;
}
}
如果calView执行相同的操作并尝试在更改startDate时更改startDate,则“if”非常有用。
答案 1 :(得分:0)
定义为retain
的属性变为strong
。定义为assign
的对象的属性变为weak
。之后,删除对retain
,release
或autorelease
的任何显式调用。此外,dealloc
不应再调用super
。