performSelector在调试模式下没有命中断点

时间:2011-01-13 05:19:24

标签: iphone xcode3.2

执行以下代码时

style = [self performSelector:sel withObject:(id)state]; 

sel中的断点未命中。这是正常行为吗?

NSString* key = state == UIControlStateNormal
    ? selector
    : [NSString stringWithFormat:@"%@%d", selector, state];
  TTStyle* style = [_styles objectForKey:key];
  if (!style) {
    SEL sel = NSSelectorFromString(selector);
    if ([self respondsToSelector:sel]) {
      style = [self performSelector:sel withObject:(id)state];
      if (style) {
        if (!_styles) {
          _styles = [[NSMutableDictionary alloc] init];
        }
        [_styles setObject:style forKey:key];
      }
    }
  }

2 个答案:

答案 0 :(得分:1)

在您对帖子的一条评论中,您提到此代码来自three20style库,并且当您放置断点时,它不会被命中。可能正在发生的事情是你正在遵循Three20推荐的链接Three20库的做法:在Build设置的“Other Linker Flags”部分中,你可能有一大堆-force-load个参数,有点像这样:

-force-load libThree20UICommon.a -force-load libThree20.a ...

问题是,当你以这种方式链接时,断点不起作用。作为解决方法,仅在调试配置中(不在您的发布配置中),从“其他链接器标志”中删除所有这些参数,并将其放入:

-all_load -ObjC

我并不熟悉这些旗帜之间的确切区别;我所知道的是,使用-all_load -ObjC可以让你的断点工作。我不建议更改Release配置的设置,因为我不确定更改的确切影响。

答案 1 :(得分:0)

尝试style = [self performSelector:@selector(sel)withObject:(id)state];