objective-c-blocks相关内容
我必须为 iOS 应用程序中的特定 C 库提供 C 风格的回调.回调没有 void *userData 或类似的东西.所以我无法在上下文中循环.我想避免引入全局上下文来解决这个问题.一个理想的解决方案是使用 Objective-C 块. 我的问题:有没有办法将块“转换"为函数指针或以某种方式包装/隐藏它? 解决方案 从技术上讲,您可以访问块的函数指针.但这样做是完全不安全的,所以我当
..
我想写一个类似这样的方法: +(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion; 我基本上剥离了从 Apple 的 UIView 类方法之一中提取的语法: + (void)animateWithDuration:(NSTimeInterval)duration
..
我创建了一个objective-c方法,它将通过NSInvocation调用一个方法: typedef void (^ScriptingEmptyBlock)();typedef void (^ScriptingErrorBlock)(NSError *error);- (void)scripting_execute:(NSString *)operation withParams:(nulla
..
我想了解转义闭包在 Swift 3 中是如何工作的?来自 Objective-C 世界,对于闭包可以逃避其封闭函数的返回的场景,您必须按照以下方式做一些事情: @property (nonatomic, copy/strong) void (^callback)(NSData *rawData);-(BOOL)someFunctionThatConsumesABlock:(void (^)(NS
..
我收到一个错误 变量不可赋值(缺少 __block 类型说明符) 在线aPerson =参与者;.如何确保块可以访问 aPerson 变量并且可以返回 aPerson 变量? Person *aPerson = nil;[参与者 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {人*参与者=(人*)ob
..
我正在使用 Parse.com 进行一些后台操作,但这是关于 __block 变量的一般问题.我想定义一个变量,使用完成块运行后台网络操作,可能在块内修改该变量,然后在块外访问它.但它始终为零. 如何将变量保留在块之外?这是在类方法中,因此不能选择使用实例变量. __block PFObject *myObject = nil;PFQuery *query = [PFQuery query
..
是否可以在不使用 typedef 的情况下在 Objective-C 中指定方法块参数?它必须像函数指针一样,但如果不使用中间类型定义,我就无法找到获胜的语法: typedef BOOL (^PredicateBlock_t)(int);- (void) myMethodTakingPredicate:(PredicateBlock_t)predicate 只有上面的编译,所有这些都失败了:
..
我正在浏览 Apple 的文档,我看到了类似这样的 (void (^)(void)).有人能解释一下这个说法是什么意思吗?^ 是异或,对吧?void XOR void 对我来说没有多大意义? 还有类似(void (^)(BOOL finished)) 解决方案 这些是向 Objective-C 添加匿名函数和函数对象的块.见例如介绍 Blocks 和 Grand中央调度: 块对
..
在 iPhone SDK 4.0 中,UIApplication 有一个新方法,setKeepAliveTimeout:,它需要一个 void(^)(void). -(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(void(^)(void))keepAliveHandler 第二个参数的语法到底是什么意思,我如何声明一个可以
..
Apple 的 Grand Central Dispatch 参考资料说: "...如果您的应用程序需要在系统——例如,如果它需要操作文件描述符,Mach端口、信号或定时器.GCD 不限于系统级应用程序,但在将其用于更高级别的应用程序之前,您应该考虑 Cocoa 中是否提供了类似的功能(通过NSOperation 和块对象)会更容易使用或更多适合您的需求.". http://devel
..
我有一个从 URL 检索 JSON 并通过协议/委托模式返回数据的类. MRDelegateClass.h #import @protocol MRDelegateClassProtocol@选修的- (void)dataRetrieved:(NSDictionary *)json;- (void)dataFailed:(NSError *)error;@结尾@interface MRDe
..
在 Objective-C 中,我知道块被认为是对象,所以我想知道是否可以将它们存储在数组中.这就引出了一个问题,块是第一类对象还是只是为了在对象之间传递它们而将它们视为对象?如果它们是一流的对象,那么它们不应该存储在数组中吗? 解决方案 编辑:无需过多赘述,在 ARC 下,您现在可以像任何其他对象一样向集合添加块(参见讨论). 我在下面保留了原始答案,因为它包含一些有趣的技术细
..
我正在阅读 Xcode 的文档,这里有一些让我感到困惑的东西: __block typeof(self) tmpSelf = self;[self methodThatTakesABlock:^ {[tmpSelf doSomething];}]; 以下内容是从文档中复制的: 块形成对其捕获的变量的强引用.如果你使用self 在块内,块形成对 self 的强引用,所以如果self 也有一
..
块很好,但是写 C 数组呢? 鉴于这种简化的情况: CGPoint 点数[10];[myArray forEachElementWithBlock:^(int idx) {点[idx] = CGPointMake(10, 20);//此处出错//不能在块内引用具有数组类型的声明}]; 搜索一段时间后找到了这个可能的解决方案,把它放在一个结构中: __block struct {CGPo
..
我在我的应用程序中使用 Grand Central Dispatch (GCD) 来完成一些繁重的工作.该应用程序使用 Core-Data 进行数据存储.这是我的场景(以及相关问题): dispatch_queue_t main_queue = dispatch_get_main_queue();dispatch_queue_t request_queue = dispatch_queue_cr
..
我有一个接受块和完成块的方法.第一个块应该在后台运行,而完成块应该在调用方法的任何队列中运行. 对于后者,我总是使用 dispatch_get_current_queue(),但它似乎在 iOS 6 或更高版本中已弃用.我应该用什么代替? 解决方案 “在调用者所在的任何队列上运行"的模式很吸引人,但最终不是一个好主意.该队列可以是低优先级队列、主队列或其他具有奇怪属性的队列.
..
我确实多次使用块和我有强引用的指针 我听说您应该使用复制,但是将块用作指针而不是原始对象有什么含义? 编译器从来没有抱怨过我不应该使用 @property (nonatomic, strong) MyBlock 块; 但应该使用 @property (nonatomic, copy) MyBlock 块; 据我所知,块只是一个对象,所以为什么要更喜欢复制? 解决方案 简
..
假设我需要与一个提供协议并在操作完成时调用委托方法的类进行通信,如下所示: @protocol SomeObjectDelegate@必需的- (void)stuffDone:(id)anObject;- (void)stuffFailed;@结尾@interface SomeObject : NSObject{}@结尾 现在,我决定虽然我可以让另一个类实现 stuffDone: 委托方法,但
..
我喜欢积木,当我不能使用积木时,我很难过.特别是,这主要发生在我每次使用委托时(例如:使用 UIKit 类,主要是预块功能). 所以我想知道......是否有可能 - 使用 ObjC 的疯狂力量 - 做这样的事情? //id _delegate;//最有可能声明为类变量,否则它将被释放_delegate = [DelegateFactory delegateOfProtocol:@prot
..
我想创建一个函数来检查 user_id 是否已经在我的数据库中. class func checkIfUserExsits(uid:String) ->布尔{userRef.childByAppendingPath(uid).observeSingleEventOfType(.Value, withBlock: { (snapShot: FDataSnapshot!) -> Void in如果
..