我应该把 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
/button2Touch
和 button3
/button3Touch
是更好的方法,但我真的看不出它们之间的区别。如果我看不出区别,那么我会使用 button3
/button3Touch
方法,因为它不需要匿名扩展并且整体上更简单。
这就是我的推理。但我会使用#1/#2 方法是正确的还是有其他原因?
第二种方法允许您使用 @property
(这在第三种方法中是不可能的,我猜您已经发现了,因为编译器会抱怨)。
在 class 扩展(您称为 "anonymous extension")中声明所有私有属性和方法更为常见(在我看来也更简洁)。
我也很好奇使用您的第三种方法是否有更严重的警告 - 如果有人知道请分享。
这里有一些示例代码来解释我自己:
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
/button2Touch
和 button3
/button3Touch
是更好的方法,但我真的看不出它们之间的区别。如果我看不出区别,那么我会使用 button3
/button3Touch
方法,因为它不需要匿名扩展并且整体上更简单。
这就是我的推理。但我会使用#1/#2 方法是正确的还是有其他原因?
第二种方法允许您使用 @property
(这在第三种方法中是不可能的,我猜您已经发现了,因为编译器会抱怨)。
在 class 扩展(您称为 "anonymous extension")中声明所有私有属性和方法更为常见(在我看来也更简洁)。
我也很好奇使用您的第三种方法是否有更严重的警告 - 如果有人知道请分享。