gpt4 book ai didi

ios - Nil __block 变量设置一个 NSString

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:42 26 4
gpt4 key购买 nike

为了避免保留循环和警告“在此 block 中强烈捕获 self 可能会导致保留循环”,我为我的 block 中的每个对象添加了这样的内容

MyViewController *__weak weakSelf= self;
NSMutableArray *__weak weakArray=AnArray;
UILabel *__weak weakLabel=ALabel;

///the block code with some examples
up2.completionBlock = ^(NSDictionary *headers, NSString *responseString) {

[weakSelf aMethodInTheController];
[weakLabel setHidden:NO];
[weakArray addObject:@"something"];

};

对于弱引用,保留循环警告消失了,但是如果我在 block 中引入一个必须设置的 nnstring 就会出现问题

MyViewController *__weak weakSelf= self;
NSMutableArray *__weak weakArray=AnArray;
UILabel *__weak weakLabel=ALabel;

NSString *__weak weakString=AString;

///the block code with some examples
up2.completionBlock = ^(NSDictionary *headers, NSString *responseString) {

[weakSelf aMethodInTheController];
[weakLabel setHidden:NO];
[weakArray addObject:@"something"];
weakString=@"atext";

};

这样我收到错误“变量不可分配(缺少_ block 类型说明符)”,所以我添加了“_block”

MyViewController *__weak weakSelf= self;
NSMutableArray *__weak weakArray=AnArray;
UILabel *__weak weakLabel=ALabel;

NSString *__weak weakString=AString;
__block NSString *BlockString = weakString;

///the block code with some examples
up2.completionBlock = ^(NSDictionary *headers, NSString *responseString) {

[weakSelf aMethodInTheController];
[weakLabel setHidden:NO];
[weakArray addObject:@"something"];
BlockString=@"atext";

};

以这种方式,一切似乎都正常工作,至少直到我进入 block 内......我原来的 Astring 变量是在我的 viewController 的 .h 中定义的,我必须稍后和 block 外访问它的值,但它的值始终为零。将 @"atext"分配给 BlockString 不要为我的原始 Astring 变量设置值?我如何才能在不收到警告且不退出 block 的情况下设置 viewController .h 中设置的变量的值?

最佳答案

Assign @"atext" to BlockString do not set a value to my original Astring variable?

不,它没有设置Astring,也不应该设置它:当你这样做的时候

NSString *__weak weakString=AString;

您创建了对 AString 变量引用的对象的第二个引用(恰好是 __weak)(例如,它是 @"some-text"):

Before

当您将 block 内的 weakString 设置为 @"atext" 时,您将引用重新指向不同的对象,但是 @"some- text" 对象仍然由 AString 变量引用:

After

如果您想更改 AString 变量,请将其设置在您的代码块中。如果它是一个 ivar,使用 weakSelf->AString。如果它是本地的,将 __block 添加到它的声明中。

关于ios - Nil __block 变量设置一个 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com