oc中检测一个实例是否可变

来源:互联网 发布:域名过户 编辑:程序博客网 时间:2024/05/17 15:57

1.为检测一个实例是否可变,不能单单去看他得类。这些可变不可变都是类集群来实现,Cocoa骑士不是用文档中说明的那些类而是一个隐藏类来工作。这个隐藏类是透明的,我们也不用关心他时怎么工作的。因此下面的代码是错误的:

    if ([NSStringFromClass([myObject class]) isEqualToString:@"__NSArray0<span style="font-family: Arial, Helvetica, sans-serif;">"]) {</span>        //错误    }
判断一个对象是否可变,看它对一个导致可变的方法是否有反应来判断。

    if ([paramDict respondsToSelector:@selector(addObject:)]) {        //正确    }

2.一个对象的真正类型只有在运行时才能确定 比如:
 NSMutableDictionary *dic= [[NSDictionary alloc]init];//运行时才知道 dic的真正类型是NSDictionary [dic initWithCapacity:20];//虽然dic拥有NSMutableDictionary的方法,但是不能调用,否则程序崩溃。

3.可变不可变可以方便的进行转换

    NSArray *array = [[NSArray alloc]init];    NSMutableArray *array1 = [NSMutableArray arrayWithArray:array];    NSLog(@"array:%@,array1:%@",[array class],[array1 class]);
输出结果:<span style="font-size:10px; font-weight: bold; font-family: Menlo;">array:__NSArray0,array1:__NSArrayM </span>

4.可变不可变的选择

不可变并非数组内的包含的对象不可变,而是一旦不可变数组创建后,就不能从中移除,添加,替换。要实现这些,通常使用他得子类。

不可变通常作为提供给外面的接口使用,防止被意外修改。

1 0
原创粉丝点击