赞
踩
今天面了ios开发,面试官问的很细,有些东西平时都没注意到,所以想分享给大家,也是方便以后自己看,最后祝各位都能找到满意的工作,有错误的地方也欢迎大家指出。
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
}
2016-06-03 13:00:16.878 test[10966:8733088] 1
在主线程中执行同步方法,并且任务放在主线程队列中,主线程队列是串行队列,任务是一个一个执行的,所以这个同步方法只能等待主任务执行完成之后才能执行该同步方法中的任务,而主线程队列的主任务又要等待改同步方法执行完成之后才能继续执行,于是就造成了循环等待,导致程序卡住不动。
总结:主线程队列也就是主队列是一个特殊的串行队列,表现在该队列的任务无论是同步方法还是异步方法中执行都不会另外开队列,主队列的任务只会在主线程中执行。
LXPerson *person = [[LXPerson alloc]init];
NSString *name = [NSString stringWithFormat:@"add"];
person.name = name;
NSLog(@"%@--%p", name, name);
NSLog(@"%@--%p", person.name, person.name);
2016-06-04 11:04:51.428 test[1331:240405] add–0xa000000006464613
2016-06-04 11:04:51.428 test[1331:240405] add–0xa000000006464613
浅拷贝,这里为什么用copy却是浅拷贝呢,因为NSString本身就是不可变的,对于它来说浅拷贝还是深拷贝都是一样的,于是苹果采用浅拷贝,这样可以节省内存的开销,但是如果copy的对象如果是可变的,那就是深拷贝,比如NSMutableString。
总结:copy不可变的对象只复制内存,属于浅拷贝,而copy可变的对象就是拷贝整个对象的内容,属于深拷贝。
copy的属性都是不可变的,如果想copy之后是可变的,使用mutableCopy属性。
不会报错。
后续会继续补充的。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。