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

时间:2016-04-02 17:21:01

标签: objective-c xcode ibaction iboutlet

以下是一些解释自己的示例代码:

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方法是正确的还是其他原因?

1 个答案:

答案 0 :(得分:1)

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

在类扩展中声明所有私有属性和方法(我们称之为"匿名扩展"),这是更常见的(在我看来更干净)。

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