更改块中的实例变量

Kei*_*ter 7 xcode warnings block objective-c ivar

我对如何更改块内的实例变量感到很困惑.

接口文件(.h):

@interface TPFavoritesViewController : UIViewController {
    bool refreshing;
}
Run Code Online (Sandbox Code Playgroud)

实施:

__weak TPFavoritesViewController *temp_self = self;
refreshing = NO;
[myTableView addPullToRefreshWithActionHandler:^{
    refreshing = YES;
    [temp_self refresh];
}];
Run Code Online (Sandbox Code Playgroud)

正如您可能猜到的那样,当我尝试更改块内的刷新ivar时,我会收到保留周期警告.如果没有出错,我该怎么做?

CRD*_*CRD 6

你的作业refreshing是一个隐含的引用self,它是以下的简写:

self->refreshing = YES;
Run Code Online (Sandbox Code Playgroud)

因此周期警告.将其更改为:

temp_self->refreshing = YES;
Run Code Online (Sandbox Code Playgroud)

  • 它不仅仅使用此代码构建.我收到以下错误:由于竞争条件可能导致空值,因此不允许取消引用__weak,首先将其分配给强变量.我想我通过添加这个来实现它:__strong TPRideListView*strong_self = temp_self; strong_self-> refresh = YES; (2认同)