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
- OC09_内存高级&集合
- C#高级编程 集合
- java高级_集合
- NSCopying协议的使用,setter和getter方法的作用,内存管理高级,集合的内存管理
- OC高级内存管理
- 内存管理高级
- OC 内存高级管理
- 内存管理高级
- 内存管理高级总结
- 内存管理高级
- 内存管理高级
- 内存管理高级
- Oc__内存管理高级
- OC内存管理高级
- 内存管理高级
- 内存管理高级
- Hibernate高级映射 --- 集合映射
- Hibernate高级映射 --- 集合映射
- HDU 5217 Brackets 线段树
- ORM进阶:映射文件编写(上)-基本映射
- Rust - Reference counted and raw pointers | 引用计数和原始指针
- Android的消息机制之ThreadLocal的工作原理
- 黑马程序员——Objective--C笔记之封装 继承 多态
- OC09_内存高级&集合
- 关于静态cell的使用
- 93 汉诺塔(三)【模拟】
- Android应用资源系列之属性(Attribute)资源
- Ubuntu14.04下,Tomcat8+Nginx+memcache配置服务器集群session共享
- Android studio 目录结构
- 算法导论/6.2保持堆性质
- Java注释讲解
- Rust - Data types | 数据类型