我的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
答案 0 :(得分:1)
单个类是用于创建类的单个实例,并在整个生命周期中使用相同的实例。
在以下任何一种情况下都不安全 1.只要你在GlobalConfig.h文件中有子类的接口声明。 2.如果您在任何子类/扩展
中使用了GlobalConfig的共享单例对象所以我觉得创建单独的文件比如UIView + AppExtensions,UIImage + AppExtensions
更好答案 1 :(得分:1)
如果您想通过类别扩展现有类(即CALayer
,UIImage
和UIColor
),则不需要单例。
单例是一个用于实例化单个对象的类(并且具有唯一的保证)。类别是一种扩展现有接口的方法,无需添加任何ivars(仅限方法),因此在使用之前不需要实例化类别。因此,类别和单身人士会对不同的要求做出反应,而无需将它们混合在一起。
您可以像以前一样定义类别,然后将它们与UIView,UIColor和CALAyer对象一起使用。