2012-08-01 110 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