• 一些iOS心得


    ARC
     1,arc是什么? automatic referece counting   mrc mannual
    iOS5 之后出来的技术
    // 2,arc的原理是什么?
    //   在程序编译的时候,系统帮我们在合适的地方加上retain,release等
    // 3,不能在使用retain,release,autorelease,retaincount
     4,使用__strong,__weak,__unsafe_unretained这些修饰符来对变量进行描述
    4.1,如果一个对象没有强引用的指针指向它,就会被立刻释放
    // 用法:全局变量用__strong,并且全局的__strong指针会在当前类的对象被释放的时候被赋值为nil
    //      局部变量用__strong,并且局部的指针 会在超出作用域之后被赋值为nil
    // 属性描述  如果是对象类型  用strong,如果是基本数据类型 unsafe_unretaind 或者 assign
    // 5,autorelease不能使用,如果需要使用,__autoreleasing(方法内部创建对象,把对象返回到外面使用)
    // 6,连线 用__weak
    // 7,解决block中的循环引用使用__weak
    // 8,属性名字不能以new开头,如果需要以new开头,那么就自己指定get方法的方法名
    // 9,arc下 使用自动释放池  @autoreleasepool{}
    // arc下  retain 就是strong  assign就是unsafe_unretained
    // 10, coreFoundation  和 foundation相互转化  交换对象所有权
    // 11,arc下结构体中不能使用oc对象
    // 12,arc和非arc混编的时候
    //    arc下某些类使用mrc编译  -fno-objc-arc
    //    mrc下某些类使用arc编译  -fobjc-arc
    // 13,让某些类必须在arc下使用,如果不是arc的环境,就报错
    /*
    #if !__has_feature(objc_arc)
    #error  必须使用arc编译
    #endif
     */

        // coreFoundation框架中提供很多常用的类型,但是语法是基于c的
        // arc 只会帮你管理Foundation框架中的对象,不会帮你管理core Foundation框架中的对象
       
        // CFBridgingRetain 把foundation框架中对象的所有权,交给corefoundation框架来处理
        NSString *str = @"str";
        CFStringRef cfstr = (CFStringRef)CFBridgingRetain(str);
        CFRelease(cfstr);
       
       
        // 创建了一个core Foundation框架中的对象
        CFStringRef cfstr2 = CFStringCreateWithCString(kCFAllocatorDefault, "str2", kCFStringEncodingUTF8);
        NSString *str2 = (__bridge_transfer  NSString *)cfstr2;
    深浅COPY
    // 浅拷贝:指针的拷贝
        // 深拷贝:对象的拷贝
        // 完全拷贝:对象,包括对象中的对象都是拷贝
        // (编码 解码的方式 实现了完全拷贝)

    // 小结!!!!!!
     对非容器类的不可变对象做的测试
    对非容器类的可变的对象做测试
        // 调用copy方法 得到的对象都是不可变的对象
        // 调用mutableCopy方法 得到的都是可变的对象
       
    可变的对象 无论是调用copy,或者mutableCopy都是深拷贝
       
        // 结论:只有不可变对象调用copy方法是浅拷贝,其他所有的都是深拷贝

      /*
        // 实现完全拷贝
        NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];
       
        // 把数组编码成data
        NSMutableData *data = [[NSMutableData alloc] init];
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        [archiver encodeObject:array1];
        [archiver finishEncoding];
       
       
        // 把data解码成数组
        NSKeyedUnarchiver *unarhiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        NSMutableArray *array4 = [unarhiver decodeObject];
        [unarhiver finishDecoding];
       
        NSLog(@"%p   %p  ",array1,array4);
        NSLog(@"%p    %p   ",[array1 objectAtIndex:0],[array4 objectAtIndex:0]);
         */

    map
    // 创建一个定位管理器(一定要写成全局的)
        _manager = [[CLLocationManager alloc] init];
        _manager.delegate = self;
       
        // 在iOS8 以前不需要请求授权
        // 也不需要在info.plist文件中配置信息
        // 在软件使用的过程中去获取位置信息
        // NSLocationWhenInUseUsageDescription
        // 不仅在使用的过程中 还可以在程序进入后台的时候也可以定位
        // NSLocationAlwaysUsageDescription
       
       
        // 判断系统的版本号,根据不同的版本执行不同的代码
    #define SystemVersion  [[[UIDevice currentDevice] systemVersion] floatValue]
        if (SystemVersion >= 8.0)
        {
            // 请求权限的
            //[_manager requestAlwaysAuthorization];
        }
       
        if ([CLLocationManager locationServicesEnabled])
        {
            NSLog(@"可以使用定位功能");

  • 相关阅读:
    理解Objective-C Runtime (六)super
    理解Objective-C Runtime (五)协议与分类
    理解Objective-C Runtime(四)Method Swizzling
    理解Objective-C Runtime(三)消息转发机制
    Objective-C Runtime(二)消息传递机制
    matlab数学实验--第一章
    Python之json模块
    Python之os模块和sys模块
    Python之小练习
    vuedevtools 离线安装
  • 原文地址:https://www.cnblogs.com/LGX3399577/p/5033581.html
Copyright © 2020-2023  润新知