iphone响应链中的操作方法所需的可见性是什么?

时间:2010-06-25 01:11:42

标签: iphone events methods visibility

在UIViewController子类中,我创建了一个条形按钮项,用于触发响应者链中的事件:

UIBarButtonItem* editListsButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:nil action:@selector(edit)];
self.navigationItem.leftBarButtonItem = editListsButton;
[editListsButton release];

在祖先UIViewController子类的实现中(即在.m文件中),我有以下内容:

@interface GroupController (PrivateMethods)
    - (void) edit;
@end

- (void) edit {
    ... do something here ...
}

当然在相应的.h文件中我声明编辑方法。这是我的随机错误。

这应该可靠吗?如何声明方法以便接收编辑事件有什么要求?

顺便说一句,据我所知,触摸“编辑”栏按钮项会导致应用程序每次触摸时都会崩溃,但仅限于成千上万的用户。我无法重现它。

1 个答案:

答案 0 :(得分:1)

除了在编译时粘贴声明的地方之外,Objective-C方法没有“可见性”。在运行时,它们都是一样的。

首先,动作方法采用参数 - 发送者。因此,您的方法确实应该声明为:

- (IBAction)edit:(id)sender;

请注意IBAction实际上#defined为void。它仅由Interface Builder使用。由于您以编程方式执行操作,因此可以使用void。当然,这引出了一个问题,即为什么你以编程方式做事,因为这几乎总是浪费时间,但......超出了这个问题的范围。

无论如何,是的,它应该可靠地运作。是否在头中声明方法在运行时会产生零差异。

鉴于您的崩溃是相当间歇性的,听起来更像是您可能遇到内存管理问题(或其他潜在的崩溃)。您是否构建并分析了代码?有崩溃日志?