GCD
(1)后台长时间执行应该用什么队列:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{…});
(2)执行完后台任务需要用什么队列渲染界面
dispatch_get_main_queue()
推送通知入口
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
有什么区别?
(1)第一次启动应用,没有出现过的界面还没有执行过viewDidLoad等方法
(2)已经启动应用
界面生命周期:

单例写法
+(NSObject *)sharedInstance
{
static NSObject *sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[NSObject alloc] init];
{
static NSObject *sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[NSObject alloc] init];
//其它的初始化...
});
return sharedInstance;
}
});
return sharedInstance;
}
这个方法是利用GCD的官方写法,注意多线程访问而造成的产生多个对象,以前的写法可以用双锁
if(abc!=nil){
sychronized(abc)
{
if(abc!=nil){
//初始化...
}
}
}
比较 @protocol 和 block 的使用
用法差不多,一个用于委托,一个用于回调,需要看具体场景使用,或者根据设计模式来使用
当回调的层数超过3层时尽量使用委托,目的是提高代码可读性
下面两组关键字的用法
retain,copy,assign
strong,weak
评论
发表评论