zoukankan      html  css  js  c++  java
  • 可变类型属性与copy

    代码:

    @import Foundation;
    
    /**************************************************
     *  Man类
     **************************************************/
    @interface Man : NSObject
    
    // 潜在风险:使用属性修饰符copy修饰一个可变类型的属性
    @property (copy, nonatomic) NSMutableString *name;
    
    @end
    
    @implementation Man
    
    @end
    
    /**************************************************
     *  main函数
     **************************************************/
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            NSMutableString *nameMutableString = [NSMutableString stringWithString:@"AAA"];
            
            Man *man = [[Man alloc] init];
            
            // 通过属性的set方法给属性赋值后,属性值的实际类型都将是不可变的类型,其执行效果类似于如下语句
            // man->_name = nameMutableString.copy;
            man.name = nameMutableString;
            
            // 属性的类型不再是可不变类型
            NSLog(@"[man.name isKindOfClass:NSMutableString.class] = %@", [man.name isKindOfClass:NSMutableString.class]  ? @"YES" : @"NO");
            NSLog(@"[man.name isKindOfClass:NSString.class] = %@", [man.name isKindOfClass:NSString.class]  ? @"YES" : @"NO");
            
            // 执行如下语句,程序可能会崩溃
            // [man.name setString:@"BBB"];
        }
        return 0;
    }

    输出:

    [man.name isKindOfClass:NSMutableString.class] = NO
    [man.name isKindOfClass:NSString.class] = YES

    总结:

    谨慎使用属性修饰符copy修饰一个可变类型的属性

  • 相关阅读:
    DOM面试题【三】
    JS面试题【二】
    移动端面试题【一】
    【python】mysql查询错误告警的处理
    硬币排成线
    书籍复印
    分割回文串
    分割回文串 II
    完全平方数
    俄罗斯套娃信封问题
  • 原文地址:https://www.cnblogs.com/xwoder/p/4469697.html
Copyright © 2011-2022 走看看