1.
在使用单例模式时一般使用allocWithZone
因为alloc最终还是会调用allocWithZone进行分配空间
2.
synchronized
线程锁(互斥锁)
优点:能防止多线程抢夺资源造成的数据安全问题
缺点:需要消耗大量的CPU资源
3.
GCD的队列类型
并发队列:自己创建的,全局
串行队列:主队列,自己创建的
4.
NSOperationQueue的队列类型
1.主队列[NSOperationQueue mainQueue]
2.其他队列(串行,并发):[[NSOperationQueue alloc] init];
5.
沙盒目录中的文件
Documents(不要将大文件放这里,否则有可能appstore审核不通过)
Library
-Caches (除非用户删掉,否则一直存在)
-Preference
tmp(随时有可能清空)
6.
//获取沙盒路径 NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; //获得文件名 NSString *filename = [app.icon lastPathComponent]; //计算出文件的全路径 NSString *file = [cachesPath stringByAppendingPathComponent:filename]; //加载沙盒中的数据 NSData *data = [NSData dataWithContentsOfFile:file];
7.
如何使一个线程常驻?
[[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
使这个线程开启RunLoop,并给它添加Source即可
8.
自动释放池什么时候释放?
在RunLoop唤醒时创建自动释放池,
在RunLoop休眠之前会释放
9.什么是RunLoop?
运行循环,跑圈,
其实它的内部就是do-while循环,在这个循环内部不断处理各种任务
(比如Timer,Source,Observer)
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,
子线程的RunLoop是手动启动(调用run方法)
RunLoop只能选择一个Mode启动,如果当前模式中没有Source,Timer,Observer,
那么就直接退出RunLoop。
10.在开发中如何使用RunLoop?什么应用场景?
开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来消息,处理其他事件)
在子线程中开启一个定时器
在子线程中进行一些长期监控
可以控制定时器在哪种模式下运行
可以让某些事件在特定模式下执行
11.
NSString与NSData的相互转换
NSData *data = [@"str" dataUsingEncoding:NSUTF8StringEncoding];
NSString *str = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
12.
在使用字典类别时,如何遍历字典中的元素
//遍历的所有的元素 [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { [string appendFormat:@" %@",key]; [string appendString:@" : "]; [string appendFormat:@"%@, ",obj]; }];
13.
NSHTTPURLResponse是NSURLRequest的子类
获取请求头,响应码,从这个类中获取。
14.
获取MIMEType类型
NSString *url = @"file:///Users/DDZ/Desktop/ARC.png"; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; NSURLResponse *response = nil; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; NSLog(@"%@",response.MIMEType);
15.
NSURLConnection的一些坑
NSURLConnection在主线程发送请求,正常可以接收服务器回传的data
但是如果将其放在子线程中,将接收data失败
原因:
因为主线程中有RunLoop,它会自动关联起来,来不断的接收data
子线程没有RunLoop,所以接收失败,
如果启动子线程的RunLoop则可以正常使用