Objective-C共同对象初始化

时间:2014-03-19 09:40:23

标签: ios objective-c cocoa-touch cocoa

在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子类上执行一些常见的初始化任务)。

有更好的方法吗?希望有:被迫输入每一种方法都很繁琐。

1 个答案:

答案 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文件即可。