2014-09-26 58 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