第一:单例(SingleTon)
自己创建一个继承NSObject的.h和.m文件,例子如下:
SingleTon.h文件
#import <Foundation/Foundation.h>
@interface SingleTon : NSObject
//声明属性:用于传值或存值
@property(nonatomic,strong)NSString *str1;
@property(nonatomic,strong)NSString *str2;
//声明一个+方法也就是一个类方法
+(SingleTon *)sharedSingleTon;
@end
SingleTon.m文件
#import "SingleTon.h"
@implementation SingleTon
+(SingleTon *)sharedSingleTon {
//声明一个静态变量:静态变量的类型是SingleTon类型
static SingleTon *singleTon = nil;
//GCD 线程管理 dispatch_once只执行一次 单次线程管理
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (!singleTon) {
singleTon = [[SingleTon alloc] init];
}
});
return singleTon;
}
@end
注意无论赋值还是使用的时候都要先进行初始化
//申明初始化单例类的对象
SingleTon *single = [SingleTon sharedSingleTon]
第二:系统单例(AppDelegate)
与单例传值类似,不过是直接用工程的AppDelegate.h和AppDelegate.m文件,在此不做例子说明了。
//获取单例对象
AppDelegate *app = [[UIApplication sharedApplication] delegate];
使用ARC时,获取全局的AppDelegate会有如下的警告。
Initializing 'AppDelegate *__strong' with an expression of incompatible type 'id<UIApplicationDelegate> _Nullable'
解决方案:强制转换
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
//获取应用程序的单例对象
UIApplication *app = [UIApplication sharedApplication];
//获取应用程序的单例对象的代理对象
AppDelegate *delegate = (AppDelegate *)app.delegate;
第三:初始化传值
第四:属性传值(局限于只能正向传值)
第五:NSUserDefaults(通过存值进行传值)
第六:代理(delegate)
第七:block
第八:通知
第九:KVO
网友评论