- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在以下代码片段 (self.searchResults) 中调用 self 时,我是否应该使用 weakSelf:
[self.restaurants enumerateObjectsUsingBlock:^(Restaurant *restaurant, NSUInteger idx, BOOL *stop) {
if ([scope isEqualToString:@"All"] || [restaurant.name isEqualToString:scope]) {
NSRange range = [restaurant.name rangeOfString:searchText
options:(NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch)];
if (range.length > 0) {
[self.searchResults addObject:restaurant];
}
}
}];
在 block 中调用 self.searchResults 时,我应该引用 weak 吗?
最佳答案
weak
这里不需要。对复制到 block 中的变量使用 weak
的目的是避免循环引用,您在这里没有这种风险 - 部分原因是 block 没有保留。
考虑以下示例。在 self 拥有的 block 中捕获 self 会导致无法打破的保留循环:
@interface MyObject : NSObject
@property (copy, nonatomic) void (^contrived)();
@end
@implementation MyObject
- (id) init
{
self = [super init];
if ( self )
{
self.contrived = ^{
NSLog( @"%@", self.description );
};
}
return self;
}
@end
关于ios - enumerateObjectsUsingBlock 中的 weakSelf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23527424/
我需要遍历 NSArray 来计算一些指标(总高度)。这是我的代码: __block CGFloat height = someInitialValue; [messages enumerateObj
我有这样的情况,我正在使用 enumerateObjectsUsingBlock 迭代我的数组对象,我需要等待迭代完成然后它应该执行进一步的代码,我怎样才能实现这个,或者如果我应该使用任何替代方法,下
在以下代码片段 (self.searchResults) 中调用 self 时,我是否应该使用 weakSelf: [self.restaurants enumerateObjectsUsingBlo
我有一个 NSMutableOrderedSet。 我需要枚举它,看起来唯一构建到集合上的选项是基于 block 的。所以选择最简单的基于 block 的选项,我有这样的东西...... [anNSM
给这个代码 NSMutableArray *array = [NSMutableArray new]; for (int i = 0; i < 10000; i++) { [array add
当我在 NSArray 上搜索 enumerateObjectsUsingBlock 时,偶然去了 NSSet Class Reference,它提供了相同的方法签名...... Doc 说 Exec
我使用快速枚举并在枚举 block 中异步发送网络请求。 那么 enumerateObjectsUsingBlock 会发生什么:只需超快地调用 block 并让枚举 block 在一段时间后完成。
我想知道如何将以下内容转换为 Swift。我已经尝试过了,但一直停留在一个概念上: 我正在使用我的属性 UICollectionViewLayoutAttributes 遍历所有对象 [newVisi
我想引用具有特定类型的枚举对象,而不仅仅是通用的 AnyObject!,但在文档中找不到任何关于它的信息。 enumerateObjectsUsingBlock 在 Swift 中的签名是: func
以下两种方式的优缺点是什么: enumerate using block NSArray *myArray = [NSArray new]; [myArray enumerateObjectsUsin
如何停止区 block 枚举? myArray.enumerateObjectsUsingBlock( { object, index, stop in //how do I
除了明显的区别: 同时需要索引和对象时使用 enumerateObjectsUsingBlock 当你需要修改局部变量时不要使用enumerateObjectsUsingBlock(我错了,看bbum
我遇到了以下编译错误: Cannot invoke 'enumerateObjectsUsingBlock' with an argument list of type '((_, _, _) ->
这是一个错误吗? 我有这样几行: [myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NS
在 Swift 2.2 之前,我可以通过使用 var 使停止参数可变然后适本地设置它来停止枚举 stop = UnsafeMutablePointer.alloc(NSNumber(bool: tru
我在将此 block 代码从 Objective C 转换为 Swift 时遇到了问题。我在网上搜索了一些示例,但没有一个修复了我遇到的错误。 如有任何帮助,我们将不胜感激。 - (void)didR
这个问题在这里已经有了答案: Collection was mutated while being enumerated error in objective C (6 个答案) 关闭 9 年前。
这个问题在这里已经有了答案: What is the BOOL *stop argument for enumerateObjectsUsingBlock: used for? (1 个回答) 关闭
我正在从我的 json 文件中读取 jason 数据,并且我成功打印了 NSarray 类型 arraytsik,现在当我尝试使用 enumerateObjectsUsingBlock 循环遍历 ar
我最近一直在使用 enumerateObjectsUsingBlock: 来满足我的快速枚举需求,但我很难理解 BOOL *stop 在枚举 block 。 NSArray 类引用状态 stop: A
我是一名优秀的程序员,十分优秀!