Questions tagged «objective-c-blocks»

块是Apple对C的闭包的实现,也可用于Objective-C和C ++。

4
为什么nil / NULL块在运行时会导致总线错误?
我开始大量使用块,不久便注意到零块会导致总线错误: typedef void (^SimpleBlock)(void); SimpleBlock aBlock = nil; aBlock(); // bus error 这似乎违背了Objective-C的通常行为,即忽略向零对象发送消息的行为: NSArray *foo = nil; NSLog(@"%i", [foo count]); // runs fine 因此,在使用块之前,我必须求助于常规的nil检查: if (aBlock != nil) aBlock(); 或使用虚拟块: aBlock = ^{}; aBlock(); // runs fine 还有其他选择吗?为什么没有nil个块不能仅仅是点头的原因?

6
从块内部调用[self methodName]?
我刚碰到块,我想它们就是我要寻找的东西,除了一件事:是否可以从块内调用方法[self methodName]? 这就是我想要做的: -(void)someFunction{ Fader* fader = [[Fader alloc]init]; void (^tempFunction)(void) = ^ { [self changeWindow:game]; //changeWindow function is located in superclass }; [fader setFunction:tempFunction]; } 我已经搜寻了几天,但找不到任何证据证明这是可能的。 这是完全有可能的,还是我在尝试将块用于不是他们想要的东西? 我使用块的原因是我创建了一个Fader类,并且我想存储一个块供其在淡出时执行。 谢谢 编辑:好的,我在建议中添加了内容,但仍然出现EXC_BAD_ACCESS错误... -(void)someFunction{ Fader* fader = [[Fader alloc]init]; __block MyScreen* me = self; void (^tempFunction)(void) = ^ { [me changeWindow:game]; //changeWindow …

3
实现采用块作为回调的方法
我想写一个类似这样的方法: +(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion; 我基本上已经从Apple的一种类方法中删除了以下语法UIView: + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion; 并希望它像这样使用: [myFoo myMethodWithView:self.view completion:^(BOOL finished){ NSLog(@"call back success"); }]; 我的问题是我该如何实施?如果有人可以指出正确的文档,那将是很好的,并且非常感谢一个非常基本的示例(或者在Stack Overflow上有类似的答案-我找不到)。对于委托人,我还是不太了解,以确定这是否是正确的方法! 我已经在实现文件中给出了一个我期望的粗略示例,但是由于我找不到信息,所以猜测是可行的。 + (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion { // do stuff if (completion) { // what sort of syntax goes here? If I've …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.