如果我不想传递一个Objective-C块,我应该使用什么关键字, NULL或nil ? 我问这是因为一个Objective-C块是一个Objective-C对象(据我所知),但表示为一个函数指针。 NULL和nil都表示一个0x0指针,但它们在语义上是不同的。 所以我很关心这个
我开始使用块,很快就注意到,无块会导致总线错误: 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块供以后使用。 我不知道该怎么做,所以我search了一下,关于这个主题的信息很less。 但是我终于find了解决scheme,我认为这可能是值得像我这样的新手分享的。 最初我以为我需要手工编写属性来使用Block_copy&Block_release。 幸运的是,我发现块是NSObjects , – copy / – release等同于Block_copy / Block_release 。 所以我可以使用@property (copy)来自动生成setters和getters。
我经常想在未来几微秒执行一些代码。 现在,我解决这个问题: – (void)someMethod { // some code } 和这个: [self performSelector:@selector(someMethod) withObject:nil afterDelay:0.1]; 它有效,但我必须每次创build一个新的方法。 是否可以使用块代替这个? 基本上我正在寻找一种方法,如: [self performBlock:^{ // some code } afterDelay:0.1]; 这对我来说真的很有用。
我怎样才能通过一个Function / Method Block ? 我试过- (void)someFunc:(__Block)someBlock无济于事。 即。 什么是一个Block的types ?
是否可以在不使用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) 我不记得我试过的其他组合。
是否有可能使用标准属性语法块作为属性? ARC有没有变化?
我有一个方法,接受一个块和一个完成块。 第一个块应该在后台运行,而完成块应该在该方法被调用的任何队列中运行。 对于后者,我总是使用dispatch_get_current_queue() ,但似乎在iOS 6或更高版本中已被弃用。 我应该用什么来代替?
Objective C中的块语法(实际上C,我假定)是出了名的不协调。 将块作为parameter passing看起来不同于将块声明为ivars,这看起来与typedef块不同。 是否有一个完整的块声明语法列表,我可以随时为您提供快速参考?