Tag: objective c blocks

哪个是正确的,无或NULL,标记“没有Objective-C块”?

如果我不想传递一个Objective-C块,我应该使用什么关键字, NULL或nil ? 我问这是因为一个Objective-C块是一个Objective-C对象(据我所知),但表示为一个函数指针。 NULL和nil都表示一个0x0指针,但它们在语义上是不同的。 所以我很关心这个

为什么nil / NULL块在运行时会导致总线错误?

我开始使用块,很快就注意到,无块会导致总线错误: typedef void (^SimpleBlock)(void); SimpleBlock aBlock = nil; aBlock(); // bus error 这似乎违背了Objective-C通常的行为,忽略消息到零对象: NSArray *foo = nil; NSLog(@"%i", [foo count]); // runs fine 因此,在使用块之前,我必须使用通常的无效检查: if (aBlock != nil) aBlock(); 或者使用虚拟块: aBlock = ^{}; aBlock(); // runs fine 还有其他的select吗? 是否有一个为什么零块不能简单地是一个nop?

从块内调用?

我刚刚遇到了块,我认为他们就是我正在寻找,除了一件事情:是否可以从一个块内调用一个方法[self methodName]? 这就是我想要做的: -(void)someFunction{ Fader* fader = [[Fader alloc]init]; void (^tempFunction)(void) = ^ { [self changeWindow:game]; //changeWindow function is located in superclass }; [fader setFunction:tempFunction]; } 我一直在寻找几天,我找不到任何证据表明这是可能的。 这是可能的,还是我试图使用块他们不是为了什么? 我使用块的原因是我创build了一个Fader类,我想存储一个块,当它完成淡出时执行。 谢谢 编辑:好的,我在build议中添加了,但我仍然得到一个EXC_BAD_ACCESS错误… -(void)someFunction{ Fader* fader = [[Fader alloc]init]; __block MyScreen* me = self; void (^tempFunction)(void) = ^ { [me changeWindow:game]; //changeWindow function is located in superclass […]

如何在Objective-C中的属性中存储块?

我想存储一个属性中的Objective-C块供以后使用。 我不知道该怎么做,所以我search了一下,关于这个主题的信息很less。 但是我终于find了解决scheme,我认为这可能是值得像我这样的新手分享的。 最初我以为我需要手工编写属性来使用Block_copy&Block_release。 幸运的是,我发现块是NSObjects , – copy / – release等同于Block_copy / Block_release 。 所以我可以使用@property (copy)来自动生成setters和getters。

块代替performSelector:withObject:afterDelay:

我经常想在未来几微秒执行一些代码。 现在,我解决这个问题: – (void)someMethod { // some code } 和这个: [self performSelector:@selector(someMethod) withObject:nil afterDelay:0.1]; 它有效,但我必须每次创build一个新的方法。 是否可以使用块代替这个? 基本上我正在寻找一种方法,如: [self performBlock:^{ // some code } afterDelay:0.1]; 这对我来说真的很有用。

Objective-C传递块作为参数

我怎样才能通过一个Function / Method Block ? 我试过- (void)someFunc:(__Block)someBlock无济于事。 即。 什么是一个Block的types ?

声明一个块方法参数,而不使用typedef

是否可以在不使用typedef的情况下在Objective-C中指定方法块参数? 它必须像函数指针一样,但是我不能在不使用中间typedef的情况下赢得胜利的语法: typedef BOOL (^PredicateBlock_t)(int); – (void) myMethodTakingPredicate:(PredicateBlock_t)predicate 只有上面的编译,所有这些失败: – (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate – (void) myMethodTakingPredicate:BOOL (^predicate)(int) 我不记得我试过的其他组合。

我可以使用Objective-C块作为属性吗?

是否有可能使用标准属性语法块作为属性? ARC有没有变化?

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

我有一个方法,接受一个块和一个完成块。 第一个块应该在后台运行,而完成块应该在该方法被调用的任何队列中运行。 对于后者,我总是使用dispatch_get_current_queue() ,但似乎在iOS 6或更高版本中已被弃用。 我应该用什么来代替?

块声明语法列表

Objective C中的块语法(实际上C,我假定)是出了名的不协调。 将块作为parameter passing看起来不同于将块声明为ivars,这看起来与typedef块不同。 是否有一个完整的块声明语法列表,我可以随时为您提供快速参考?