zoukankan      html  css  js  c++  java
  • NSArray,NSSet,NSDictionary用法总结

    用法总结:NSArray,NSSet,NSDictionary

    iphone_dev_note 2011-05-07 14:31:08 阅读67 评论0

      字号:

     订阅

    三种集合类来收集cocoa对象(NSObject对象):
    NSArray 用于对象有序集合(相当于是数组)
    NSSet 用于对象无序集合
    NSDictionary用于键值映射
    以上三种集合类是不可变的(一旦初始化后,就不能改变)

    以下是对应的三种可变集合类(这三种可变集合类是对应上面三种集合类的子类)
    NSMutableArray
    NSMutableSet
    NSMutableDictionary

    注:这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int, float, double, BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。

    NSArray
    Ordered collection of objects. Immutable. You cannot add or remove objects to it once it’s created.
    Important methods:
    + (id)arrayWithObjects:(id)firstObject, ...;     // nil terminated 
    - (int)count;
    - (id)objectAtIndex:(int)index;                     //  NSString *s1=[[myarray objectAtIndex: 0];
    - (void)makeObjectsPerformSelector:(SEL)aSelector;
    - (NSArray *)sortedArrayUsingSelector:(SEL)aSelector;
    - (id)lastObject; // returns nil if there are no objects in the array (convenient)
    注:
    类方法arrayWithObjects 可以创建an autoreleased NSArray of the items.例如
    @implementation MyObject
    - (NSArray *)coolCats {
    return [NSArray arrayWithObjects:@“Steve”, @“Ankush”, @“Sean”, nil];
    }
    @end
    Other convenient create with methods (all return autoreleased objects):
    [NSString stringWithFormat:@“Meaning of %@ is %d”, @“life”, 42];
    [NSDictionary dictionaryWithObjectsAndKeys:ankush, @“TA”, janestudent, @“Student”, nil];
    [NSArray arrayWithContentsOfFile:(NSString *)path];
    -----创建数组 -----
        //NSArray *array = [[NSArray alloc] initWithObjects:
        @"One",@"Two",@"Three",@"Four",nil];

        self.dataArray = array;
        [array release];

        //- (unsigned) Count;数组所包含对象个数;
        NSLog(@"self.dataArray cound:%d",[self.dataArray count]);

        //- (id) objectAtIndex: (unsigned int) index;获取指定索引处的对象;
        NSLog(@"self.dataArray cound 2:%@",[self.dataArray objectAtIndex:2]);

    ------ 从一个数组拷贝数据到另一数组(可变数级) -------   

        //arrayWithArray:
        //NSArray *array1 = [[NSArray alloc] init];
        NSMutableArray *MutableArray = [[NSMutableArray alloc] init];
        NSArray *array = [NSArray arrayWithObjects:
                          @"a",@"b",@"c",nil];
        NSLog(@"array:%@",array);
        MutableArray = [NSMutableArray arrayWithArray:array];
        NSLog(@"MutableArray:%@",MutableArray);

        array1 = [NSArray arrayWithArray:array];
        NSLog(@"array1:%@",array1);

        //Copy

        //id obj;
        NSMutableArray *newArray = [[NSMutableArray alloc] init];
        NSArray *oldArray = [NSArray arrayWithObjects:
                             @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];

        NSLog(@"oldArray:%@",oldArray);
        for(int i = 0; i < [oldArray count]; i++)
        {        
            obj = [[oldArray objectAtIndex:i] copy];
            [newArray addObject: obj];
        }
        //     
        NSLog(@"newArray:%@", newArray);
        [newArray release];

    //快速枚举
        //NSMutableArray *newArray = [[NSMutableArray alloc] init];
        NSArray *oldArray = [NSArray arrayWithObjects:
                             @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];   
        NSLog(@"oldArray:%@",oldArray);

        for(id obj in oldArray)
        {
            [newArray addObject: obj];
        }
        //     
        NSLog(@"newArray:%@", newArray);
        [newArray release];   

        //Deep copy

        //NSMutableArray *newArray = [[NSMutableArray alloc] init];
        NSArray *oldArray = [NSArray arrayWithObjects:
                             @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];   
        NSLog(@"oldArray:%@",oldArray);   
        newArray = (NSMutableArray*)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef)oldArray, kCFPropertyListMutableContainers);
        NSLog(@"newArray:%@", newArray);
        [newArray release];   

        //Copy and sort

        //NSMutableArray *newArray = [[NSMutableArray alloc] init];
        NSArray *oldArray = [NSArray arrayWithObjects:

    NSMutableArray
    Mutable version of NSArray.
    - (void)addObject:(id)anObject;
    - (void)insertObject:(id)anObject atIndex:(int)index;
    - (void)removeObjectAtIndex:(int)index;
    - (void)removeAllObjects;

    -----给数组分配容量-----
        //NSArray *array;
        array = [NSMutableArray arrayWithCapacity:20];

    -----在数组末尾添加对象-----
        //- (void) addObject: (id) anObject;
        //NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];
        [array addObject:@"Four"];
        NSLog(@"array:%@",array);

    -----删除数组中指定索引处对象-----   
        //-(void) removeObjectAtIndex: (unsigned) index;   
        //NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];
        [array removeObjectAtIndex:1];
        NSLog(@"array:%@",array);

     ----- 数组枚举-----  
    //1- (NSEnumerator *)objectEnumerator;  //从前向后
        //NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];
        NSEnumerator *enumerator;
        enumerator = [array objectEnumerator];

        id thingie;
        while (thingie = [enumerator nextObject]) {
            NSLog(@"thingie:%@",thingie);
        }
    //2- (NSEnumerator *)reverseObjectEnumerator;  //从后向前
        //NSMutableArray *array = [NSMutableArray arrayWithObjects:
        @"One",@"Two",@"Three",nil];
        NSEnumerator *enumerator;
        enumerator = [array reverseObjectEnumerator];

        id object;
        while (object = [enumerator nextObject]) {
            NSLog(@"object:%@",object);
        }
    //3、快速枚举
        //NSMutableArray *array = [NSMutableArray arrayWithObjects:
        @"One",@"Two",@"Three",nil];
        for(NSString *string in array)
        {
            NSLog(@"string:%@",string);
        }

    ----- NSValue(对任何对象进行包装)-----
    //NSRect放入NSArray
        NSMutableArray *array = [[NSMutableArray alloc] init];
        NSValue *value;
        CGRect rect = CGRectMake(0, 0, 320, 480);   
        value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)];
        [array addObject:value];
        NSLog(@"array:%@",array);
    //Array 提取
        value = [array objectAtIndex:0];
        [value getValue:&rect];
        NSLog(@"value:%@",value);

    ----使用NSMutableArray要防止内存泄露------
    NSObject* p1 = [[NSObject alloc] init];
    NSObject* p2 = [[NSObject alloc] init];
    NSMutableArray* objectsArray = [[NSMutableArray alloc] init];

    [objectsArray addObject:p1];
    NSLog(@"p1 count:%d", [p1 retainCount]);//输出 2,也就是执行追加对象后,对象的计数器也被加1
    //[p1 release];
    //NSLog(@"p1 count:%d", [p1 retainCount]);

    //同样做数组替换时
    [objectsArray replaceObjectAtIndex:0 withObject:p2];
    NSLog(@"p2 count:%d", [p2 retainCount]);//输出 2,同样也是2
    NSLog(@"p1 count:%d", [p1 retainCount]);//输出 1,对象p1仍然存在
    //[p2 release];
    //NSLog(@"p2 count:%d", [p2 retainCount]);

    //执行清空数组
    [objectsArray removeAllObjects];
    NSLog(@"p2 count:%d", [p2 retainCount]);//输出 1,对象p2仍然存在
    //[p2 release];

    由此可知,每次执行上面的数组操作后,要执行对象release,如上面注释中的语句,才能保证内存不泄露。


    NSSet
    Unordered collection of objects.
    Immutable. You cannot add or remove objects to it once it’s created.
    Important methods:
    + setWithObjects:(id)firstObj, ...;  // nil terminated

    - (int)count;

    - (BOOL)containsObject:(id)anObject;

    - (id)anyObject;

    - (void)makeObjectsPerformSelector:(SEL)aSelector;

    - (id)member:(id)anObject; // uses isEqual: and returns a matching object (if any)

    NSMutableSet

    Mutable version of NSSet.

    + (NSMutableSet *)set;

    - (void)addObject:(id)anObject;

    - (void)removeObject:(id)anObject;

    - (void)removeAllObjects;

    - (void)unionSet:(NSSet *)otherSet;

    - (void)minusSet:(NSSet *)otherSet;

    - (void)intersectSet:(NSSet *)otherSet;

    NSDictionary

    Hash table. Look up objects using a key to get a value.

    Immutable. You cannot add or remove objects to it once it’s created.

    Keys are objects which must implement.  Keys are usually NSString objects.

    - (NSUInteger)hash & - (BOOL)isEqual:(NSObject *)obj

    Important methods:

    + dictionaryWithObjectsAndKeys: (id)firstObject, ...;

    - (int)count;

    - (id)objectForKey:(id)key;

    - (NSArray *)allKeys;

    - (NSArray *)allValues;

     -----创建字典 -----

        //- (id) initWithObjectsAndKeys;

        //NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3",nil];
        NSString *string = [dictionary objectForKey:@"One"];
        NSLog(@"string:%@",string);
        NSLog(@"dictionary:%@",dictionary);
        [dictionary release];

    NSMutableDictionary

    Mutable version of NSDictionary.

    + (NSMutableDictionary *)dictionary;

    - (void)setObject:(id)anObject forKey:(id)key;

    - (void)removeObjectForKey:(id)key;

    - (void)removeAllObjects;

    - (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;

     -----创建可变字典 -----   

    //创建

        NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 

    //添加字典

        [dictionary setObject:@"One" forKey:@"1"];

        [dictionary setObject:@"Two" forKey:@"2"];

        [dictionary setObject:@"Three" forKey:@"3"];

        [dictionary setObject:@"Four" forKey:@"4"];

        NSLog(@"dictionary:%@",dictionary);

    //删除指定的字典

        [dictionary removeObjectForKey:@"3"];

        NSLog(@"dictionary:%@",dictionary);

  • 相关阅读:
    实例属性 类属性 实例域 类域
    研究数据集
    static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符
    accessor mothod mutator mothod 更改器方法 访问器方法 类的方法可以访问类的任何一个对象的私有域!
    上钻 下钻 切片 转轴 降采样
    识别会话
    Performance Tuning Using Linux Process Management Commands
    Secure Hash Algorithm 3
    grouped differently across partitions
    spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset
  • 原文地址:https://www.cnblogs.com/wangzh1225/p/3512281.html
Copyright © 2011-2022 走看看