Foundation(3)结构体 集合

 

#import

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //1.创建一个NSRange结构体 表示范围

        NSRange range = {4,5};

        NSRange range2 = NSMakeRange(4, 5);

        NSString * strRange = NSStringFromRange(range);

        NSLog(@"strRange %@",strRange);

       

        //2.NSSize 等同于 CGSize 有两个值组成 weight表示宽度 height高度

        NSSize  size = {21,19};

        NSSize  size2 = NSMakeSize(21, 19);

        NSString *strSize =  NSStringFromSize(size2);

        NSLog(@"strSize %@",strSize);

       

        //3.NSPoint 等同CGPoint 表示一个点的坐标位置

        NSPoint point = {20,40};

        NSPoint point2 = NSMakePoint(20, 40);

        NSString * strPoint = NSStringFromPoint(point);

        NSLog(@"strPoint %@",strPoint);

       

        //4.NSRect

        NSRect rect = {40,60,100,200};

        NSRect rect2 = NSMakeRect(0, 10, 100, 100);

        NSString * strRect = NSStringFromRect(rect);

        NSLog(@"strRect %@",strRect);

       

    }

    return 0;

}

 

Foundation--基本数据类型的包装类☆

// 有一个疑问:包装类会不会自动包装和解包?<</span>假设有一个int 类型的5 先手动生成包装类,然后按照%d输出观察其结果;这个问题来源于NSArray //6.数组中存储基本数据类型,打印的array4中的23被手动生成包装类但打印是按照%d打印的>

#import

 

int main(int argc, const char * argv[])

{

 

    //集合中,不能存储基本数据类型,如果你想要把基本数据类型存储到数组,集合中,就必须把它转换成基本数据类型的包装类

    @autoreleasepool {

      //int float double char

        int a = 10;

//        [NSString stringWithFormat:@"%d",a];

       

        //1.使用NSNumber 包装  int数据类型

        NSNumber * number1 = [NSNumber numberWithInt:a];

        NSLog(@"%@",number1);

       

        //2.直接转换成字符串

        NSString * strInt = [number1 stringValue];

        NSLog(@"strInt %@",strInt);

       

        //3.float包装成NSNumber

        NSNumber * number2 = [NSNumber numberWithFloat:98.98];

        NSLog(@"number2 %@",[number2 stringValue]);

       

        //4.包装类转换成基本数据类型

       

        int b  = [number1 intValue];

        NSLog(@"%d",b);

    }

    return 0;

}

Foundation--字符串练习题

//  NSString+NSStringExt.h

#import

 

@interface NSString (NSStringExt)

 

- (int)calculateSubStringCount:(NSString *)str;

 

@end

//  NSString+NSStringExt.m

#import "NSString+NSStringExt.h"

 

@implementation NSString (NSStringExt)

 

- (int)calculateSubStringCount:(NSString *)str

{

    @"abcd123abcdrgabc"

    //@"abc"

    int count = 0;

   

    NSRange range = [self rangeOfString:str];

    if (range.location == NSNotFound)

    {

        return count;

    }

   

    //声明一个临时字符串,记录截取之后的字符串

    NSString * subStr = self;

   

    while (range.location != NSNotFound) {

       

        //只要进入循环就要count++

        count++;

        //每次记录之后,把找到的字串截取掉

        //range.location + range.length 得出的结果就是我们要截取的字符串起始索引的位置

        subStr = [subStr substringFromIndex:range.location + range.length];

       

        NSLog(@"subStr %@",subStr);

       

        //每一次截取之后,要判断一些,截取完成剩余部分字符串,是否还有子串存在

        //如果存在,我们的while循环会继续运行,如果不存在while循环结束

        range = [subStr rangeOfString:str];

       

        NSLog(@"rang %@",NSStringFromRange(range));

        NSLog(@"location=%lu",range.location);

        // 上面的这个循环值得多次体会

    }

    return count;

}

   

@end

//  main.m

#import

#import "NSString+NSStringExt.h"

//练习1;计算子串在真个字符串中出现的次数

//@"abcd123abcdrgabc"

//@"abc"

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        NSString * str1 = @"abcd789ercsswwwbc45abc5";

        NSString * str2 = @"abc";

        int count =   [str1 calculateSubStringCount:str2];

        NSLog(@"count %d",count);

       

    }

    return 0;

}

Foundation--集合类

// 可以这样理解集合类:把一些数据打包起来作为一个数据包给函数传参<</span>当然它的作用不仅限函数传参>

NSArray NDDictionary NSSet 统称为集合类,都用来打包数据

// 下面简单介绍集合概念

#import

 

 

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

       

       

    }

    return 0;

}

 

NSArray

//  Person.h

#import

 

@interface Person : NSObject

 

@property (nonatomic,strong)NSString * name;

@property (nonatomic,assign)int age;

 

- (id)initWithName:(NSString *)name andAge:(int)age;

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

- (id)initWithName:(NSString *)name andAge:(int)age

{

    if (self = [super init])

    {

        _name = name;

        _age = age;

    }

    return self;

}

 

- (NSString *)description

{

    return [NSString stringWithFormat:@"age = %d name = %@",_age,_name];

}

 

@end

//  main.m

#import

#import "Person.h"

//1.创建数组的方式

//2.获取数组中的元素

//3.数组中村粗的实际上是对象的指针地址

//4.打包数据,方便参数传递

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        {

            //1.创建集合

            //NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作

            NSArray * array = [[NSArray alloc] init];

            

            NSLog(@"%@",array);

           

            //2.通过构造方法的方式创建一个NSArray

            //在创建一个NSArray的时候,集合的最后一个元素一定是nil<</span>用类方法和对象方法创建的对象加nil,注意:在下面的快捷方式创建的数组不加nil>

            NSArray * array1 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];

            NSLog(@"%@",array1);

           

            //3.数组中可以存储不同类型的对象

            NSNumber * number = [NSNumber numberWithInt:10];

            NSArray * array2 = [[NSArray alloc] initWithObjects:@"one",@"two",number, nil];

            NSLog(@"array2  %@",array2);

           

            //4.数组实际上存储的时对象的地址,同样也可以存储数组的地址

            NSArray * a1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil];

            NSArray * a2 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];

            NSArray * a3 = [[NSArray alloc] initWithObjects:a1,a2, nil];

           

            NSLog(@"a3 %@",a3);

           

            //5.存储自定义的对象

            //最好都给我重写 description方法

            Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20];

            Person * p2 = [[Person alloc] initWithName:@"hell" andAge:18];

            Person * p3 = [[Person alloc] initWithName:@"marray" andAge:38];

           

            NSArray * array3 = [[NSArray alloc] initWithObjects:p1,p2,p3, nil];

            NSLog(@"array3  %@",array3);

           

            //6.数组中存储基本数据类型,

            //如果你要在数组中存储基本数据类型,请给我包装好了之后在去存 NSNumber

            //注意不要把nil值存储到NSArray,会导致数据丢失

            NSString * str = nil;

            NSArray * array4 = [[NSArray alloc] initWithObjects:@"2",str,[NSNumber numberWithInt:23], nil];

            NSLog(@"array4 %@",array4);

           

            //7.创建数组的快捷方式<</span>这里没用nil>

            NSArray * karray = @[@"a",@"b",@"c"];

            NSLog(@"karray %@",karray);

           

            //8.快速获得一个数组中的元素

            NSString * kstr = karray[0];

// 上面一句话应该从右边向左边理解:karray[0]是一个字符串它需要一个字符串指针指向

// 反之如果从左向右理解:kstr是一个字符串指针,它要指向字符串,可是右边的karray[0]是不是字符串,这是

//不确定的。所以这句话应该从右往左理解

            NSLog(@"kstr %@",kstr);

        }

#pragma mark 从集合中取出对象

       

        { // 这个括号可以防止下面的array与上面的array重名

            //9.从集合中取出数据

            NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil];

            //数组的index时从0开始的

            NSString * str = [array objectAtIndex:0];

            NSLog(@"str %@",str);

           

            //10.获得数组的元素个数

            NSUInteger arrayCount = [array count];

            NSLog(@"arrayCount %d",arrayCount);

           

        }

        

       

#pragma mark 判断数组中是否存在某个对象

        {

           

            Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20];

            Person * p2 = [[Person alloc] initWithName:@"nihao" andAge:30];

           

            NSArray * array = @[p1,p2];

           

            BOOL isContain = [array containsObject:p1];

            if (isContain)

            {

                NSLog(@"存在");

            }else

            {

                NSLog(@"不存在");

            }

           

        }

       

    }

    return 0;

}

 

 

 

遍历数组

//  Person.h

#import

 

@interface Person : NSObject

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

@end

//  main.m

#import

#import "Person.h"

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //1.使用for循环遍历数组

        NSArray * array = @[@"one",@"two",@"three"];

        for (int i = 0; i < array.count; i++)

        {

            NSString * str = array[i];

            NSLog(@"array[%d] = %@",i,str);

        }

       

        //1.数据类型

        //BOOL id NSObject * (NSString * NSArray *) block SEL

        //2.流程控制语句

        // 增强for循环

       

        //你的array.count值是多少,他就会循环多少次,每一次都取出数据中的一个元素

        //存储到str

        //2.使用增强for循环的方式遍历数组<</span>有缺陷见下面>

        for (NSString * str in array)

        {

            NSLog(@"str = %@",str);

        }

       

       

        //.注意事项

        //如果你的数组中村粗了多种不同类型的数据,那么最好不要调用某个对象特有的方法,会导致程序崩溃

        //在实际的开发中,一个数组往往只负责存储一种数据类型

        Person * p1 = [[Person alloc] init];

        NSArray * array2 = @[@"one",[NSNumber numberWithInt:10],p1];

       

        for (NSString * str in array2)

        {

//            NSLog(@"array2 str %@",str);

//            NSLog(@"str %ld",str.length);

        }

       

        //3.枚举器

        NSArray * array3 = @[@"one",@"two",@"three"];

       

        NSEnumerator * enumerateor =  [array3 objectEnumerator];

       

        NSString * value;

       

        while (value = [enumerateor nextObject]) {

            NSLog(@"enum str %@",value);

        }

       

    }

    return 0;

}

数组排序☆

如何理解block和后面的一些排序方式?

//  Person.h

#import

 

@interface Person : NSObject

 

@property (nonatomic,assign) int age;

@property (nonatomic,strong) NSString * name;

@property (nonatomic,strong) NSString * year;

 

- (id)initWithName:(NSString *)name  andAge:(int)age andYear:(NSString *)year;

//+ (id)personWithName:(NSString *)name  andAge:(int)age andYear:(NSString *)year;

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

- (id)initWithName:(NSString *)name  andAge:(int)age andYear:(NSString *)year

{

    if (self = [super init])

    {

        _name = name;

        _age = age;

        _year = year;

       

    }

    return self;

}

 

- (NSString *)description

{

    return [NSString stringWithFormat:@"name %@ age %d year %@",_name,_age,_year];

}

 

@end

//  main.m

#import

#import "Person.h"

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //1.使用sortedArrayUsingSelector

        //也是最简单的排序方式

        //数组是按照你存入元素的顺序存储的

       

        NSArray * array = @[@"b",@"d",@"a",@"z"];

        NSLog(@"排序前 array %@",array);

       

        array = [array sortedArrayUsingSelector:@selector(compare:)];

//        NSArray * array1 = [array sortedArrayUsingSelector:@selector(compare:)];

        NSLog(@"排序后 array %@",array);

       

        //2.使用block方式排序

        NSArray * array2 = @[@"z",@"4",@"b",@"3",@"x"];

       

        NSLog(@"array2 排序前 %@",array2);

        array2 = [array2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

           

           

            //obj1 compare obj2 就是正序排序

//            return [obj1 compare:obj2];

            //obj2 compare obj1 就是倒序排序

            return [obj2 compare:obj1];

           

        }];

        NSLog(@"array2 排序后 %@",array2);

       

      

        Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20 andYear:@"1990"];

        Person * p2 = [[Person alloc] initWithName:@"alex" andAge:18 andYear:@"2990"];

        Person * p3 = [[Person alloc] initWithName:@"merry" andAge:25 andYear:@"1890"];

       

        NSArray * array3 = @[p1,p2,p3];

        NSLog(@"array3 排序前 %@",array3);

       

        //3. 自己定义数组排序

        //如果你向给你自己定义的对象排序,必须根据某一个属性来排序,

        //sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,你就把哪个属性的名字当成key传入

        //ascending YES表示正序 NO表示倒叙

        NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

        NSSortDescriptor * d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO];

       

        //如果你要使用多个属性进行排序,默认在前面的NSSortDescriptor优先级比较高

        NSArray * descripts = @[d2,d1];

       

        array3 = [array3 sortedArrayUsingDescriptors:descripts];

       

        NSLog(@"array 3 排序后  %@",array3);

       

       

        //4.

 

        NSArray * array4 = @[p1,p2,p3];

        NSLog(@"array4 排序前 %@",array4);

        array4 = [array4 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

           

            Person * p1 = obj1;

            Person * p2 = obj2;

           

            //year

            return [p1.year compare:p2.year];

            

           

        }];

        NSLog(@"array4 排序后 %@",array4);

    }

    return 0;

}

可变数组

#import

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //NSMutableArray 继承至 NSArray

//        NSArray * array = @[];

        //1.创建可变数组

        NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];

       

        //使用addObject 动态给数组中增加元素

       

        NSString * str1 = @"one";

        NSString * str2 = @"two";

        NSString * str3 = @"three";

       

        //数组中可以存储,同一个对象多次

        [array addObject:str1];

        [array addObject:str2];

        [array addObject:str3];

        [array addObject:str1];

       

        //2.指定对象插入的位置

        [array insertObject:str1 atIndex:2];

       

        //3.删除 会通过对象,删除数组中所有的同一个地址的对象

        [array removeObject:str1];

       

        //4.通过索引的方式删除对象,超出了数组的count,那么就会导致异常 index beyond bounds

        [array removeObjectAtIndex:0];

       

        [array addObject:str2];

        [array addObject:str3];

        [array addObject:str1];

       

        //5.删除数组中所有的元素

        [array removeAllObjects];

       

       

        NSLog(@"array %@",array);

       

       

        [array addObject:str2];

        [array addObject:str3];

        [array addObject:str1];

   

        //1.for换遍历

        for (int i = 0; i < array.count; i++)

        {

            NSString * str = [array objectAtIndex:i];

           

            //在遍历数组的时候,千万不要给数组中,增加,或者删除元素

//            [array removeObject:str1];

           

            NSLog(@"str %@",str);

         

        }

       

       

        //2.增强for循环

        for (NSString * str in array)

        {

//            [array removeObject:str1];

            //如果你在增强for循环中,删除元素,会直接导致异常出现

            NSLog(@"str %@",str);

        }

       

        //3.枚举器

       

        NSEnumerator * enumerator = [array objectEnumerator];

        NSString * value;

        while (value = [enumerator nextObject]) {

            //如果你在枚举器中,删除元素,会直接导致异常出现

//            [array removeObject:str1];

            NSLog(@"str %@",value);

        }

       

       

        //4.要通过遍历的方式确定删除哪个元素怎么办

       

        NSMutableArray * array2 = [[NSMutableArray alloc] init];

        [array2 addObject:@"1"];

        [array2 addObject:@"2"];

        [array2 addObject:@"3"];

        [array2 addObject:@"4"];

        [array2 addObject:@"5"];

       

        NSMutableArray * tmp = [[NSMutableArray alloc] init];

       

        for (NSString * str in array2)

        {

            if ([str isEqualToString:@"3"])

            {

                [tmp addObject:str];

            }

        }

       

        NSLog(@"array2 %@",array2);

        NSLog(@"tmp %@",tmp);

       

       

        //遍历临时数组

        for (int i = 0; i < tmp.count; i++)

        {

            NSString * str = [tmp objectAtIndex:i];

           

            //从原数组中删除,临时数组中存储的对象

            [array2 removeObject:str];

        }

       

        NSLog(@"array2 %@",array2);

       

       

    }

    return 0;

}

字典类

#import

//字典是以键值对的形式来存储数据  key value

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //1.创建字段,不可变的

        NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaozhe",@"name", nil];

        NSLog(@"dic %@",dic);

       

        //2.快捷创建方式

        NSDictionary * dic2 = @{ @"one":@"1",@"two":@"2"};

        NSLog(@"dic2 %@",dic2);

       

        //3.字典中可以存任意数据类型

        // 字典的顺序不是自然顺序

        NSArray * array = @[@"one",@"two"];

       

        NSDictionary * dic3 = @{

                                @"one":@"1",

                                @"num":[NSNumber numberWithInt:10],

                                @"aaa":dic2,

                                @"bbb":dic,

                                @"ar1":array

                                

                                };

       

        NSLog(@"dic3 %@",dic3);

       

        //4.获得字典的长度

        NSLog(@"count %ld",dic3.count);

       

        //5.从字典中取值

       

        NSString * str  = [dic3 objectForKey:@"one"];

        NSLog(@"str %@",str);

       

        NSDictionary * dicTmp = [dic3 objectForKey:@"aaa"];

        NSLog(@"dicTmp %@",dicTmp);

        NSArray * arrayTmp = [dic3 objectForKey:@"ar1"];

        NSLog(@"arrayTmp %@",arrayTmp);

               

        //6.遍历

       

        //取出所有的key

        NSArray * allkeys = [dic3 allKeys];

        NSLog(@"allkeys %@",allkeys);

       

        for (int i = 0; i < allkeys.count; i++)

        {

            NSString * key = [allkeys objectAtIndex:i];

           

            //如果你的字典中存储的多种不同的类型,那么最好用id类型去接受它

            id obj  = [dic3 objectForKey:key];

            NSLog(@"obj %@",obj);

        }

   

        //2.枚举器

       

        NSEnumerator * enumerator =  [dic3 objectEnumerator];

       

        id value;

        while (value = [enumerator nextObject]) {

            NSLog(@"value %@",value);

        }

    }

    return 0;

}

可变字典

//  Student.h

#import

 

@interface Student : NSObject

 

@property (nonatomic,assign) int age;

@property (nonatomic,strong) NSString * name;

 

- (id)initWithName:(NSString *)name andAge:(int)age;

 

@end

//  Student.m

#import "Student.h"

 

@implementation Student

 

- (id)initWithName:(NSString *)name andAge:(int)age

{

    if (self = [super init])

    {

        _name = name;

        _age = age;

    }

    return self;

}

 

- (NSString *)description

{

    return [NSString stringWithFormat:@"name %@ age %d",_name,_age];

}

 

@end

//  main.m

#import

#import "Student.h"

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //1.创建一个可变长度字典

        NSMutableDictionary * muDic = [[NSMutableDictionary alloc] initWithCapacity:0];

        //2.向字典中村如数据

        [muDic setObject:@"1" forKey:@"one"];

        [muDic setObject:@"2" forKey:@"two"];

        [muDic setObject:@"3" forKey:@"three"];

       

        NSLog(@"muDic %@",muDic);

       

        //3.删除

        [muDic removeObjectForKey:@"one"];

       

        NSLog(@"muDic %@",muDic);

       

        //4.全部删除

        [muDic removeAllObjects];

       

        NSLog(@"muDic %@",muDic);

       

       

        Student * stu1 = [[Student alloc] initWithName:@"xiaoher" andAge:20];

        Student * stu2 = [[Student alloc] initWithName:@"alex" andAge:50];

        Student * stu3 = [[Student alloc] initWithName:@"xiaoli" andAge:10];

       

        [muDic setObject:stu1 forKey:@"s1"];

        [muDic setObject:stu2 forKey:@"s2"];

        [muDic setObject:stu3 forKey:@"s3"];

        //在向字典中存储数据的时候,一定要保证key值是唯一的

//        [muDic setObject:stu3 forKey:@"s3"];

//        [muDic setObject:stu3 forKey:@"s3"];

//        [muDic setObject:stu3 forKey:@"s3"];

   

       

        NSLog(@"muDic %@",muDic);

       

       

        //1.使用for循环遍历字典

        NSArray * allkeys = [muDic allKeys];

       

        for (int i = 0; i < allkeys.count; i++)

        {

            NSString * key = [allkeys objectAtIndex:i];

            Student * stu = [muDic objectForKey:key];

            NSLog(@"stu %@",stu);

        };

       

        //2.使用枚举器

       

        NSEnumerator * enumerator = [muDic objectEnumerator];

        Student * tmp;

        while (tmp = [enumerator nextObject]) {

            NSLog(@"tmp %@",tmp);

        }

       

       

    }

    return 0;

}

集合

#import

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //NSArray 自然顺序

        //NSSet是无序的

        //注意:这个是最为重要的功能 NSSet中不能够存储重复的数据,可以用它来去除重复的值

        NSString * str1 = @"one";

        NSString * str2 = @"two";

        NSString * str3 = @"three";

        NSSet * set = [[NSSet alloc] initWithObjects:str1,str2,str3,str1, nil];

        NSLog(@"set %@",set);

       

        //count

        NSLog(@"count %ld",set.count);

       

       BOOL isContains =  [set containsObject:str1];

        if (isContains)

        {

            NSLog(@"YES");

        }

        else

        {

            NSLog(@"NO");

        }

       

        //4.遍历

       

        NSEnumerator * enumerator = [set objectEnumerator];

        NSString * value;

        while (value = [enumerator nextObject]) {

            NSLog(@"value %@",value);

        }

       

    }

    return 0;

}

可变集合

#import

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        NSString * str1 = @"one";

        NSString * str2 = @"two";

       

        //1 创建一个可变集合

        NSMutableSet * muSet = [[NSMutableSet alloc] init];

       

        //2.增加值

        [muSet addObject:str1];

        [muSet addObject:str2];

       

        NSLog(@"muSet %@",muSet);

       

        //3.删除

        [muSet removeObject:str1];

       

        NSLog(@"muSet %@",muSet);

       

        //4.删除所有

//        [muSet removeAllObjects];

   

        NSLog(@"muSet %@",muSet);

       

        //5.遍历

        NSEnumerator * en = [muSet objectEnumerator];

        NSString * value;

        while (value = [en nextObject]) {

            NSLog(@"value %@",value);

        }

       

       

    }

    return 0;

}

集合相互转换

#import

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        //1.NSArray 转换成 NSMutableArray

        NSArray * array = @[@"one",@"two",@"three"];

        NSMutableArray * muArray = [NSMutableArray arrayWithArray:array];

        NSLog(@"muarray %@",muArray);

       

        //2.NSDictonary 转换成        NSMutableDictionary

        NSDictionary * dic = @{@"one":@"1",@"two":@"2"};

        NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithDictionary:dic];

        NSLog(@"mudic %@ ",muDic);

       

        //3.NSset 转换成 NSMutableSet

        NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two", nil];

        NSMutableSet *muSet = [NSMutableSet setWithSet:set];

        NSLog(@"muSet %@",muSet);       

       

        //4.NSArray 转换成NSSet

        NSMutableSet * muSet2 = [NSMutableSet setWithArray:array];

        NSLog(@"muSet2 %@",muSet2);

               

        //5.NSDictionary 转化成NSArray

        NSArray * allkeys = [dic allKeys];

        NSLog(@"allkeys %@",allkeys);

        NSArray * allValues = [dic allValues];

        NSLog(@"allValues %@",allValues);

       

        //6.字符串转换成数组

        NSString * str = @"www.itacast.cn";

        NSArray * strArray =        [str componentsSeparatedByString:@"."];

        NSLog(@"strArray %@",strArray);

       

    }

    return 0;

}

集合手动内存管理☆

疑问点在红山注释部分

//  Person.h

#import

 

@interface Person : NSObject

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

- (void)dealloc

{

    [super dealloc];

    NSLog(@"Person 被销毁了");

}

 

@end

//  main.m

#import

#import "Person.h"

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        // retainCount 1

        Person * p  = [[Person alloc] init];

       

        //1

        NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];

       

        //当你把对象存入到,数组中的时候,数组会对这个对象进行一次 retain操作

        [array addObject:p];// [p retain] retaiCount 2

       

        //当你把一个对象移除数组中的时候,会对该对象进行一次 release操作 retainCount 1

//        [array removeObject:p];

        //会对数组中所有的对象,进行一次,relsease操作

//        [array removeAllObjects];

        

        //当集合对象被销毁的时候,会对其内部所有的对象进行一次 release操作

        //0

        [array release];// 此句话该如何理解?

        //retainCount - 0

       

       

        //0

        [p release];

       

        NSLog(@"ddddd");

       

    }

    return 0;

}

 

 

ARC机制集合内存管理

//  Person.h

#import

 

@interface Person : NSObject

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

- (void)dealloc

{

    NSLog(@"Person 被销毁了");

}

 

@end

//  main.m

#import

#import "Person.h"

//ARC机制,是否需要担心内存溢出呢

//谁告诉你不用的心得啊:道理就是下面的示

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

       

        Person * p = [[Person alloc] init];

       

        NSMutableArray * array = [[NSMutableArray alloc] init];

       

        //当一个对象被存入集合中的时候,默认会保存它的强指针

        [array addObject:p];

       

        //当个把一个对象从集合中,删除的时候,会释放掉这个对象的强指针

//        [array removeObject:p];

       

//        [array removeAllObjects];

       

        array = nil;  // 没有此句话下面的p所指对象不能被回收,这是ARC下的内存问题:当把一个对象保存

//在集合中往往要注意内存问题

       

        p = nil;

       

        NSLog(@"adfasdf");

       

    }

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值