objective-c-blocks相关内容

使用块保留“self"的循环

恐怕这个问题非常基础,但我认为它与许多涉足块的 Objective-C 程序员有关. 我听说,由于块捕获在它们内部引用的局部变量作为 const 副本,在块中使用 self 会导致保留循环,如果块被复制.所以,我们应该使用 __block 来强制块直接处理 self 而不是复制它. __block typeof(self) bself = self;[someObject messageW ..
发布时间:2021-12-02 18:15:30 移动开发

“__block"有什么作用?关键字是什么意思?

Objective-C 中的 __block 关键字到底是什么意思?我知道它允许您修改块内的变量,但我想知道... 它究竟告诉编译器什么? 它还有别的作用吗? 如果仅此而已,那为什么首先需要它? 它在任何地方的文档中吗?(我找不到). 解决方案 它告诉编译器任何被它标记的变量在块内使用时都必须以特殊方式处理.通常,也会复制块中使用的变量及其内容,因此对这些变量所做的任何修改都不 ..
发布时间:2021-12-01 18:03:26 移动开发

实现 API 时如何避免在块中捕获 self ?

我有一个可用的应用程序,我正在努力将它转换为 Xcode 4.2 中的 ARC.预检查警告之一涉及在导致保留循环的块中强烈捕获 self.我制作了一个简单的代码示例来说明这个问题.我相信我明白这意味着什么,但我不确定实现此类场景的“正确"或推荐方法. self 是类 MyAPI 的一个实例 下面的代码经过简化,仅显示与我的问题相关的对象和块的交互 假设 MyAPI 从远程源获取数据,My ..

如何在延迟后触发块,例如 -performSelector:withObject:afterDelay:?

有没有办法在延迟后使用原始参数调用块,例如使用 performSelector:withObject:afterDelay: 但使用类似 int/double/float? 解决方案 我认为您正在寻找 dispatch_after().它要求您的块不接受任何参数,但您可以让该块从您的本地范围捕获这些变量. int parameter1 = 12;浮动参数2 = 144.1;//延迟执行我 ..

iOS 后台获取和完成块

我正在尝试定义此方法 - (void)backgroundFetchWithCompletion:(void(^)(UIBackgroundFetchResult))completionHandler; 但是我在 UIBackgroundFetchResult 上收到一个错误,说只允许没有类型的参数列表,我正在关注这个教程和这个 教程,这就是他们定义方法的方式. 解决方案 最后执行某个 ..
发布时间:2021-11-16 19:01:32 移动开发

我的基于块的 API 应该只有完成处理程序还是成功和失败处理程序?

在 ObjC 中设计基于块的 API 时,哪种方法更好,一个或两个完成块,成功和失败各一个? 假设我们有一种方法可以异步地将某些内容检索到一个块中,其中一个完成块将是: - (void) retrieveSomethingCompletion:(void (^)(id retrievedObject, NSError *error))completionBlock; 还有成功/失败块(A ..
发布时间:2021-11-15 01:54:37 移动开发

理解ios UIView动画块和dispatch_async(dispatch_get_main_queue)块

我试图更好地理解这个主题.假设我想做一些非常酷的动画,如下所示 - (void)coolAnimation{[UIView animateWithDuration: 一些持续时间动画:^{一些动画}];} 因为它是一个动画块,它会自动添加到 main_queue 吗?或者为了最佳实践,我应该始终将 UI 更新添加到 main_queue 中,如下所示. dispatch_async(disp ..
发布时间:2021-09-13 20:06:27 移动开发

程序流程出错

在这段代码片段中,程序的流程是先跳出 for 循环,然后才进入块内 结果块:^(ALAsset *资产).代码首先在底部打印 NSLog,然后在循环内执行块.这里发生了什么? ALAssetsLibrary *lib=[ALAssetsLibrary new];_sizeOfSelectedImage=0;for (int i=0; i ..
发布时间:2021-06-12 18:30:45 移动开发

如何调用这个函数?

我在 Apple 文档中看到的以下示例,对如何调用 qsort_b 功能感到困惑?const void *l & 需要传递哪些参数?const void *r. char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" };qsort_b(myCharacters, 3, sizeof(char *), ^(const ..
发布时间:2021-06-12 18:30:42 移动开发

在数组块枚举中创建 UITableViews 导致崩溃

所以故事是这样的:) 我试图阻止 NSArray 中的枚举对象,并为每个对象动态创建 UITableViews 并将它们添加到 UIScrollView 中.我正在使用 来自 www.objc.io 的更轻的视图控制器 为了可读性和可重用性.分别为每个 UITableView 创建数据源.问题是我总是崩溃 -[NSObject(NSObject)doesNotRecognizeSelect ..
发布时间:2021-06-12 18:30:36 移动开发

NSDictionary 和 Objective-C 块怪癖

我用键 NSString 和对象块初始化 NSDictionary,就像这样. NSDictionary * d =[NSDictionary 字典WithObjectsAndKeys:^ ( int p1 ){ 一些代码 }, @"a",^ ( int p1, NSString * p2 ){ 一些代码 }, @"b",零]; 当我检索其中一些块时,它检索失败,即 someVar = [d ..
发布时间:2021-06-12 18:30:32 移动开发

从Objective-C中的异步块递增变量

我在Objective-C中正在使用的服务遇到了一个难题.该服务的目的是解析核心数据实体列表,并为每个对象下载相应的图像文件.该服务的原始设计使我的Web服务器无法同时进行太多下载请求.为了解决这个问题,我将负责执行下载请求的代码移到了递归方法中.每个下载请求的完成处理程序都会再次调用该方法,从而确保每次下载都将等待上一个下载完成后再进行分派. 棘手的地方是负责实际更新核心数据模型和进度指示 ..
发布时间:2021-04-12 19:07:50 移动开发

UIImageView过渡Betwen多个图像

我正在使用以下代码在短时间内更改UIImageView的图像.如您所见,正在使用的图像存储在数组中. 问题是,无论我设置了什么“持续时间"或“延迟",imageview几乎都会立即更改为数组中的最后一张图像. 我应该使用主线程在每次图像转换之间添加延迟吗? //////////////////////////////////////////////////////////////// ..
发布时间:2021-04-07 20:03:11 移动开发