• iOS中的一些细节


    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则可以正常使用

  • 相关阅读:
    js汉字转换为阿拉伯数字支持十到十九
    JS中判断是中文数字的函数
    一个JS正则的字符串替换函数
    thinkphp3.2.3使用formdata的多文件上传
    计算列表中的名字出现的订单中的订单总额
    配置ssl使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
    IIS8.5中的强制https直接修改web.config文件和顶级域名跳转www和过滤子目录不强制跳转
    关于wordpress4.8中的Twenty Seventeen主题的主题选项增加章节的实现
    excel中统计COUNTIFS的值为0
    thinkphp3.2.3集成phpexcel1.8导出设置单元格合并
  • 原文地址:https://www.cnblogs.com/langji/p/5319641.html
Copyright © 2020-2023  润新知