objective-c-blocks相关内容

有没有办法将 ObjectiveC 块包装成函数指针?

我必须为 iOS 应用程序中的特定 C 库提供 C 风格的回调.回调没有 void *userData 或类似的东西.所以我无法在上下文中循环.我想避免引入全局上下文来解决这个问题.一个理想的解决方案是使用 Objective-C 块. 我的问题:有没有办法将块“转换"为函数指针或以某种方式包装/隐藏它? 解决方案 从技术上讲,您可以访问块的函数指针.但这样做是完全不安全的,所以我当 ..
发布时间:2022-01-03 08:19:07 移动开发

如何在 Swift 3(引擎盖下)中实现转义闭包?它们是否像objective-c那样隐式地block_copied/retained?

我想了解转义闭包在 Swift 3 中是如何工作的?来自 Objective-C 世界,对于闭包可以逃避其封闭函数的返回的场景,您必须按照以下方式做一些事情: @property (nonatomic, copy/strong) void (^callback)(NSData *rawData);-(BOOL)someFunctionThatConsumesABlock:(void (^)(NS ..
发布时间:2022-01-01 11:38:56 移动开发

在块完成后如何访问 __block 变量?

我正在使用 Parse.com 进行一些后台操作,但这是关于 __block 变量的一般问题.我想定义一个变量,使用完成块运行后台网络操作,可能在块内修改该变量,然后在块外访问它.但它始终为零. 如何将变量保留在块之外?这是在类方法中,因此不能选择使用实例变量. __block PFObject *myObject = nil;PFQuery *query = [PFQuery query ..
发布时间:2021-12-30 16:37:33 移动开发

类型之间的插入字符而不是变量,用括号括起来

我正在浏览 Apple 的文档,我看到了类似这样的 (void (^)(void)).有人能解释一下这个说法是什么意思吗?^ 是异或,对吧?void XOR void 对我来说没有多大意义? 还有类似(void (^)(BOOL finished)) 解决方案 这些是向 Objective-C 添加匿名函数和函数对象的块.见例如介绍 Blocks 和 Grand中央调度: 块对 ..
发布时间:2021-12-29 19:09:30 移动开发

为什么我应该为高级应用程序选择 GCD 而不是 NSOperation 和块?

Apple 的 Grand Central Dispatch 参考资料说: "...如果您的应用程序需要在系统——例如,如果它需要操作文件描述符,Mach端口、信号或定时器.GCD 不限于系统级应用程序,但在将其用于更高级别的应用程序之前,您应该考虑 Cocoa 中是否提供了类似的功能(通过NSOperation 和块对象)会更容易使用或更多适合您的需求.". http://devel ..

在数组中存储块

在 Objective-C 中,我知道块被认为是对象,所以我想知道是否可以将它们存储在数组中.这就引出了一个问题,块是第一类对象还是只是为了在对象之间传递它们而将它们视为对象?如果它们是一流的对象,那么它们不应该存储在数组中吗? 解决方案 编辑:无需过多赘述,在 ARC 下,您现在可以像任何其他对象一样向集合添加块(参见讨论). 我在下面保留了原始答案,因为它包含一些有趣的技术细 ..
发布时间:2021-12-24 17:07:43 移动开发

__weak 和 __block 引用有什么区别?

我正在阅读 Xcode 的文档,这里有一些让我感到困惑的东西: __block typeof(self) tmpSelf = self;[self methodThatTakesABlock:^ {[tmpSelf doSomething];}]; 以下内容是从文档中复制的: 块形成对其捕获的变量的强引用.如果你使用self 在块内,块形成对 self 的强引用,所以如果self 也有一 ..

访问块内的 C 数组(变量数组计数)Objective-C

块很好,但是写 C 数组呢? 鉴于这种简化的情况: CGPoint 点数[10];[myArray forEachElementWithBlock:^(int idx) {点[idx] = CGPointMake(10, 20);//此处出错//不能在块内引用具有数组类型的声明}]; 搜索一段时间后找到了这个可能的解决方案,把它放在一个结构中: __block struct {CGPo ..

iOS 6 中完成块的 dispatch_get_current_queue() 的替代方法?

我有一个接受块和完成块的方法.第一个块应该在后台运行,而完成块应该在调用方法的任何队列中运行. 对于后者,我总是使用 dispatch_get_current_queue(),但它似乎在 iOS 6 或更高版本中已弃用.我应该用什么代替? 解决方案 “在调用者所在的任何队列上运行"的模式很吸引人,但最终不是一个好主意.该队列可以是低优先级队列、主队列或其他具有奇怪属性的队列. ..

Cocoa 块作为强指针 vs 复制

我确实多次使用块和我有强引用的指针 我听说您应该使用复制,但是将块用作指针而不是原始对象有什么含义? 编译器从来没有抱怨过我不应该使用 @property (nonatomic, strong) MyBlock 块; 但应该使用 @property (nonatomic, copy) MyBlock 块; 据我所知,块只是一个对象,所以为什么要更喜欢复制? 解决方案 简 ..

如何使用 Block 简化回调逻辑?

假设我需要与一个提供协议并在操作完成时调用委托方法的类进行通信,如下所示: @protocol SomeObjectDelegate@必需的- (void)stuffDone:(id)anObject;- (void)stuffFailed;@结尾@interface SomeObject : NSObject{}@结尾 现在,我决定虽然我可以让另一个类实现 stuffDone: 委托方法,但 ..
发布时间:2021-12-17 22:41:56 移动开发

使用块在现场创建代表

我喜欢积木,当我不能使用积木时,我很难过.特别是,这主要发生在我每次使用委托时(例如:使用 UIKit 类,主要是预块功能). 所以我想知道......是否有可能 - 使用 ObjC 的疯狂力量 - 做这样的事情? //id _delegate;//最有可能声明为类变量,否则它将被释放_delegate = [DelegateFactory delegateOfProtocol:@prot ..
发布时间:2021-12-06 21:07:28 移动开发