2012-08-01 61 views
6

我對如何更改塊內的實例變量非常困惑。更改塊中的實例變量

接口文件(.h)中:

@interface TPFavoritesViewController : UIViewController { 
    bool refreshing; 
} 

實施:

__weak TPFavoritesViewController *temp_self = self; 
refreshing = NO; 
[myTableView addPullToRefreshWithActionHandler:^{ 
    refreshing = YES; 
    [temp_self refresh]; 
}]; 

正如你可能已經猜到,我得到了保留週期警告,當我試圖改變內部的清涼伊娃該塊。我如何做到這一點而不會出現錯誤?

回答

6

你分配refreshingself的隱式引用,它是簡寫:

self->refreshing = YES; 

因此週期警告。將其更改爲:

temp_self->refreshing = YES; 
+2

它不會使用此代碼構建。我得到以下錯誤:由於競爭條件引起的可能的空值,不允許解引用__weak,請首先將其分配給強變量。我想我通過添加這個工作來實現它:__strong TPRideListView * strong_self = temp_self; strong_self-> refreshing = YES; – 2012-08-01 04:49:44

+0

小心;解引用弱指針會導致崩潰。最好從塊內部的弱塊做出強有力的指針,檢查無,然後使用它。 – 2012-08-01 04:50:27

+0

@KeiranPaster - 道歉我錯過了第二次警告;如果你的代碼保持良好的警告,你的工作*提供*你的對象呆在附近(即'self'是有效的);該代碼不處理「無」值的可能性。我假設你知道它是,如果你不... – CRD 2012-08-01 10:23:18