2014-09-26 51 views
0

我试图实现一个名为OCCCalendarView的gitHub项目,但它看起来是项目写在弧前,我想知道如何重构此方法,以便我可以使用它与iOS 7 & 8.如何获得摆脱保留&版本?如何使用保留版本重构getter和setter方法?

- (void)setStartDate:(NSDate *)sDate 
{ 
    if(startDate) 
    { 
     [startDate = release]; 
     startDate = nil; 
    } 
    startDate = [sDate retain]; 
    [calView setStartDate:startDate]; 
} 
+0

您不需要重构。按原样使用该文件,并将该.m文件标记为不使用ARC。 – rmaddy 2014-09-26 16:08:39

回答

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“如果”是很有用的。

+0

感谢gnasher,正是我所需要的。我知道我可以将文件标记为不使用ARC,但为了保持一致性,我想避免这样做。 – user3915861 2014-09-26 16:28:10

0

定义为retain的属性变成strong。对象的属性定义为assign,成为weak。之后,摆脱任何明确的电话retainreleaseautorelease。此外,dealloc不应再拨打super