我应该把 IBOutlets 和 IBActions 放在哪里?

Where should I put IBOutlets and IBActions?

这里有一些示例代码来解释我自己:

MyViewController.h

@interface MyViewController
@property (nonatomic, strong) IBOutlet UIButton *button1;
  - (IBAction)button1Touch;
@end

MyViewController.m

@interface MyViewController ()
@property (nonatomic, strong) IBOutlet UIButton *button2;
- (IBAction)button2Touch;
@end

@implementation MyViewController {
  IBOutlet UIButton *button3;
}

- (IBAction)button1Touch {
}

- (IBAction)button2Touch {
}

- (IBAction)button3Touch {
}

@end

当我学习如何使用 XCode 时,所有教程都使用 button1/button1Touch 方法。最近我在一个项目中遇到了 button2/button2Touch 方法。所以我尝试了 button3/button3Touch 变体,它也工作正常。

对我来说 button1/button1Touch(通常)是一个糟糕的方法,因为它是内部 属性 和方法,不应该被使用 MyViewController 或扩展它。当然如果是在MyViewController之外使用的话,那么在这里声明也无妨,但通常我都是想把不需要展示的都隐藏起来。

所以 button2/button2Touchbutton3/button3Touch 是更好的方法,但我真的看不出它们之间的区别。如果我看不出区别,那么我会使用 button3/button3Touch 方法,因为它不需要匿名扩展并且整体上更简单。

这就是我的推理。但我会使用#1/#2 方法是正确的还是有其他原因?

第二种方法允许您使用 @property(这在第三种方法中是不可能的,我猜您已经发现了,因为编译器会抱怨)。

在 class 扩展(您称为 "anonymous extension")中声明所有私有属性和方法更为常见(在我看来也更简洁)。

我也很好奇使用您的第三种方法是否有更严重的警告 - 如果有人知道请分享。