单例使用于全局的内容,如设备相关:网络状态、设备方向
@class Singleton;
// 用static申明一个类的静态实例,
static Singleton *_sharedInstance = nil;
@interface Singleton : NSObject
// "+" 表示类的方法,由类调用
+(Singleton *)sharedInstance;
@end
+(Singleton *)sharedInstance
{
if (!_sharedInstance) {
_sharedInstance =[[self alloc]init];
}
return _sharedInstance;
}
// 避免生成两个_sharedInstance,仅在多线程下需要这样做
+(id)allocWithZone:(struct _NSZone *)zone
{
@synchronized(self)
{
if (_sharedInstance ==nil) {
_sharedInstance = [super allocWithZone:zone];
return _sharedInstance;
}
}
return nil;
}
//单例的结果就是,调用类方法,只返回一个共有的对象
Singleton *single = [Singleton sharedInstance];
Singleton *single2 = [Singleton sharedInstance];
if (single == single2) {
NSLog(@"两个单例方法生成的对象指向同一个对象");
}
类别主要用于对已有的类拓展,可以是系统的,也可以是自己写的
@interface UIView (UpsideDown)
//上下翻转
-(void)upsideDown;
@end
@implementation UIView (UpsideDown)
-(void)upsideDown
{
CGFloat angle = M_PI;
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
[self setTransform:transform];
}
@end
详细例子参照:https://github.com/caigee/iosdev_sample下的
Sigleton