在Objective-C(好吧,Cocoa / Cocoa Touch)中,对象通常有许多初始化器。在其他语言中,我已经习惯了有一个我可以覆盖的地方来影响对象初始化,但我认为没有办法避免像下面这样的代码:
- (void)commonInit
{
// Do stuff
}
- (id)init
{
self = [super init];
if (self) [self commonInit];
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) [self commonInit];
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) [self commonInit];
return self;
}
(在这种情况下,在UIView
子类上执行一些常见的初始化任务)。
有更好的方法吗?希望有:被迫输入每一种方法都很繁琐。
答案 0 :(得分:0)
您可以使用类别选项执行此操作。
.h文件
@interface UIImage (CommonInit)
- (void)commonInit;
@end
.m文件
#import <QuartzCore/QuartzCore.h>
#import "UIView+CommonInit.h"
@implementation UIView (trans)
- (void)commonInit; {
//... do your stuff
}
@end
现在可以使用下面的代码
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) [self commonInit];
return self;
}
只需在任意位置导入此文件,或者如果您想要一切,只需将其导入YourProject-Prefix.pch
文件即可。