试图理解iOS上的块

时间:2011-01-06 12:30:03

标签: iphone objective-c-blocks

我试图了解如何在iOS上使用块。我读过Apple的文档但是,像往常一样,它们含糊不清,并且没有提到几个重要的信息。我也搜索过没有成功。这就是我想要做的练习,以便理解这一点。

我创建了一个块来读取字符串并将字符串与之前的读取进行比较。如果字符串不相同,则返回YES,如果它们相同,则返回NO。

这就是我的做法:

我在.h

上宣布了这一点
BOOL (^differentStrings)(void);

我在.m中,在viewController

中的viewDidLoad中声明了这个
__block NSString * previousString;
__block NSString * currentString;
differentStrings = ^(void){

    currentString = [self getString];
    NSLog(@"%@", currentString); // not printing anything on console

    if (![currentString isEqualToString:previousString]) {
        previousString = currentString;
        return YES;
    } else {
        return NO;
    }
};

这就是我的用法:我有一个线程可以做到这一点:

if (differentStrings)
  NSLog (@"strings are different);

这些是我遇到的问题:

  1. 该块始终返回YES(字符串不同)
  2. 我不习惯在videDidLoad中声明这个。我该怎么声明这个,所以我可以全局使用它作为方法?我应该像方法那样把它放进去吗?
  3. 我在块中调用方法“getString”。可以吗?
  4. 我觉得奇怪的是在.m上声明块变量。我认为,我应该在.h上声明块变量,然后在.m上使用它们。我试图这样做,但收到了错误。
  5. 我在块的第一行设置了一个调试点,但它没有停在那里;
  6. 块内的NSlog行不打印任何内容。是不是要调用块?
  7. 你们能帮助我吗?

2 个答案:

答案 0 :(得分:15)

答案 1 :(得分:4)