OC09_内存高级&集合

来源:互联网 发布:北大医学部知乎 编辑:程序博客网 时间:2024/06/05 15:49
1.内存高级新建一个Person类.Person.h@interface Person : NSObject@property(nonatomic, retain)NSString *name;@property(nonatomic, retain)NSString *sex;@property(nonatomic, assign)NSUInteger age;@property(nonatomic, retain)NSString *hobby;@endPerson.m- (void)dealloc{    // 当Person对象销毁时,把其成员一并release.    [_sex release];    [_name release];    [_hobby release];    [super dealloc];}// 标准setter方法,其中包含内存优化过程,在编程时可不写.- (void)setName:(NSString *)name {    // 第一种方法(适用于旧值比较多).    // 当两个对象(地址)不是同一对象的时候.    if (_name != name) {        // 防止指针重指向的时候造成内存泄露.        [_name release];        // 防止野指针访问异常.        _name = [name retain];    // 第二种方法(适用于新值比较多).    [name retain];    [_name release];    _name = name;    }}- (void)setSex:(NSString *)sex {    if (_sex != sex) {        [_sex release];        _sex = [sex retain];    }}- (void)setAge:(NSUInteger)age {    _age = age;}- (void)setHobby:(NSString *)hobby {    if (_hobby != hobby) {        [_hobby release];        _hobby = [hobby retain];    }}@endmain.mPerson *person = [[Person alloc] init];NSString *name = [[NSString alloc] initWithString:@"梅西"];NSString *name1 = [[NSString alloc] initWithString:@"C.罗"];// setter方法.[person setName:name];   // per.name = name;[name release];NSLog(@"%@", person.name);(结果:梅西)   // 虽然name已经被释放,但是还是能打印结果.[person setName:name1];[name1 release];[person setName:name1];   // 野指针访问异常.NSLog(@"%@", person.name);(结果:C.罗)   // 虽然name1已经被释放,但是还是能打印结果.2.集合// NSSet.// collection 容器 (数组, 字典, 集合)// 存储对象.// 无序的.// 集合元素必须唯一.(1).NSSet *set1 = [NSSet setWithObjects:@"a", @"b", @"b",@"b", nil];NSLog(@"%@", set1);

结果:

(2). 打印元素个数.NSLog(@"%ld", set1.count);(结果:2).   // 应为元素集合必须唯一,重复的只打印一个.(3). 获取某个元素.NSLog(@"%@", [set1 anyObject]);(结果:b).(4). 是否包含.if ([set1 containsObject:@"a"]) {    NSLog(@"包含!~");} else {    NSLog(@"不包含!~");}(结果:包含!~).3.可变集合.NSMutableSet *set = [NSMutableSet set];(1).添加元素.[set addObject:@"R"];[set addObject:@"T"];[set addObject:@"Y"];NSLog(@"%@", set);

添加结果

(2).移除.[set removeObject:@"R"];NSLog(@"%@", set);

移除结果

(3).NSCountedSet 计数集合.NSCountedSet *countedSet = [NSCountedSet set];[countedSet addObject:@"A"];[countedSet addObject:@"A"];[countedSet addObject:@"B"];[countedSet addObject:@"C"];NSLog(@"%@", countedSet);

计数结果

(4).获取对象加入集合的次数.NSLog(@"%lu", [countedSet countForObject:@"A"]);

获取结果

(5).集合的遍历for (NSString *temp in countedSet) {    NSLog(@"%@", temp);}

遍历的结果

0 0
原创粉丝点击