iPhone Global类有类别,这是正确的吗?

时间:2011-08-03 09:00:59

标签: iphone objective-c ios

我的singleton全局类在同一个类中有所有这些categeories,在头文件中它们的接口和实现文件中的实现如下所示,

这有效,但我不太清楚我在做什么是好习惯,因为它已经是一个单独的类,我将这些方法称为类别并做一些分配,发布......和东西。或者它们在全局类之外是否已经被认为是不同的实现?

你能告诉我这里的一切是否正确吗?

#import "GlobalConfig.h"
#import "SynthesizeSingleton.h"
@implementation GlobalConfig
SYNTHESIZE_SINGLETON_FOR_CLASS(GlobalConfig);
@end

@implementation UIColor (APP)
+(UIColor *) APP_NAV_COLOR { return [UIColor colorWithRed:00/256.0 green:111/256.0    
                                                 blue:59/256.0 alpha:1.0]; }
+(UIColor *) APP_BUTTON_COLOR { return [UIColor colorWithRed:00/256.0 green:00/256.0    
@end

@implementation UIImage(APP)
+(UIImage *) APP_IMAGE_BCKGROUND {

NSString *path = [[NSBundle mainBundle] pathForResource:@"bckPhone" ofType:@"png"];
return [UIImage imageWithContentsOfResolutionIndependentFile:path]; 
}
@end

@implementation CALayer(APP)
+(CALayer *) APP_SELECTION_VIEW:(UITableViewCell *)cell {
UIView *cellView = [[UIView alloc] initWithFrame:cell.frame];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = cellView.bounds;   
gradient.startPoint = CGPointMake(0.5, 0);
gradient.endPoint = CGPointMake(0.5, 1);
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor APP_WHITE_COLOR] CGColor],    (id)[[UIColor APP_BLACK_COLOR] CGColor], nil];  
[cellView release];
return gradient;
}
@end

@implementation UIView(APP)
+(UIView *) APP_BACKGROUND_VIEW:(UITableViewCell *)cell {
UIView *cellView2 = [[UIView alloc] initWithFrame:cell.frame];
CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = cellView2.bounds;
gradient2.startPoint = CGPointMake(0, 0.5);
gradient2.endPoint = CGPointMake(1, 0.5);
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor APP_WHITE_COLOR] CGColor], (id)[[UIColor APP_COLOR] CGColor], nil];
[cell.layer insertSublayer:gradient2 atIndex:0];
[cellView2 release];
UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame];
 myBackView.backgroundColor=[[UIColor APP_COLOR] colorWithAlphaComponent:0.1];
[myBackView autorelease];
return myBackView;
}
@end

2 个答案:

答案 0 :(得分:1)

单个类是用于创建类的单个实例,并在整个生命周期中使用相同的实例。

在以下任何一种情况下都不安全 1.只要你在GlobalConfig.h文件中有子类的接口声明。 2.如果您在任何子类/扩展

中使用了GlobalConfig的共享单例对象

所以我觉得创建单独的文件比如UIView + AppExtensions,UIImage + AppExtensions

更好

答案 1 :(得分:1)

如果您想通过类别扩展现有类(即CALayerUIImageUIColor),则不需要单例。

单例是一个用于实例化单个对象的类(并且具有唯一的保证)。类别是一种扩展现有接口的方法,无需添加任何ivars(仅限方法),因此在使用之前不需要实例化类别。因此,类别和单身人士会对不同的要求做出反应,而无需将它们混合在一起。

您可以像以前一样定义类别,然后将它们与UIView,UIColor和CALAyer对象一起使用。