您的位置:首页 > 移动开发 > IOS开发

iOS中的一些细节

2016-03-25 15:22 393 查看
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:@"\t%@",key];
[string appendString:@" : "];
[string appendFormat:@"%@,\n",obj];

}];


13.

NSHTTPURLResponse是NSURLRequest的子类

获取请求头,响应码,从这个类中获取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: