gpt4 book ai didi

objective-c - 为什么不总是在 block 中使用 weakSelf?

转载 作者:太空狗 更新时间:2023-10-30 03:36:51 25 4
gpt4 key购买 nike

我理解为什么我们会在一个 block 中使用 weakSelf,只是不那么多。

我正在将一个代码库转换为 ARC,它给出了很多带有 block 的保留周期警告。从我收集到的文档中,我需要更改此内容:

[self.selectedAsset addToFavoritesWithCompletion:^(NSError *error) {
self.selectedAsset.isFavorite = YES;
[self updateIsFavoriteButton];
}];

为此:

__weak MyViewController* weakSelf = self;
[self.selectedAsset addToFavoritesWithCompletion:^(NSError *error) {
self.selectedAsset.isFavorite = YES;
[weakSelf updateIsFavoriteButton];
}];

让编译器满意并避免保留循环。我的问题是为什么没有必要更改行:

self.selectedAsset.isFavorite = YES;

使用weakSelf?它不也评估为方法调用吗?为什么编译器不警告这种格式的行?

[[self selectedAsset]setIsFavorite:YES];

编辑:我刚刚更新到 XCode 4.6,它现在只针对这种情况生成编译器警告。有趣的时机:)

最佳答案

My question is why isn't it necessary to change the line:

self.selectedAsset.isFavorite = YES; to use weakSelf? Doesn't it evaluate to a method call as well? Why doesn't the compiler warn about lines in this format?

[[self selectedAsset]setIsFavorite:YES];

没错,就是方法调用。它确实会导致对 self 的强引用。如果您不希望它保留 self,则有必要将其更改为 weakSelf

编译器警告不会捕获所有内容。

关于objective-c - 为什么不总是在 block 中使用 weakSelf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587884/

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