我的iOS学习历程 - OC第十天
来源:互联网 发布:知乎付费广告 编辑:程序博客网 时间:2024/06/01 23:13
今天学习的有:
一.内存的高级管理
二.多态
一.内存的高级管理
在这里写的是如何在需要内存管理时候的setter,getter方法,自定义初始化,遍历构造器的实现写法:
例如下面的Student类:
1.自定义初始化
-(instancetype)initWithAge:(NSInteger)age name:(NSString *)name { self = [super init]; if (self) { // 学了属性和内存之后 // 不要出现_name // 全部写 self. _age = age; self.name = name; // 这种赋值方式 对于基本数据类型是安全的 // 对于对象类型 赋值是不安全的 应该调用set方法 进行赋值 保证内存的安全 } return self; }
2.遍历构造器
+(instancetype)studentWithAge:(NSInteger)age name:(NSString *)name { Student *s = [[Student alloc]initWithAge:age name:name]; return [s autorelease];}
3.setter,getter方法
-(void)setAge:(NSInteger)age{ _age = age;}-(NSInteger)age{ return _age;}// 主要注意的是属性的属性为retain和copy的写法-(void)setName:(NSString *)name{ if (_name != name) { [name release]; _name = [_name retain]; }}-(NSString *)name{ return [[_name retain]autorelease];}
下面是属性的属性为copy时
-(void)setName:(NSString *)name{ if (_name != name) { [name release]; _name = [_name copy]; }}// 注意的是Copy和retain的写法大致相同 基本上使用的都是retain-(NSString *)name{ return [[_name retain]autorelease];}
而重写dealloc方法时候要注意对_name的释放(预防出现野指针)
-(void)dealloc{ [_name release]; [super dealloc];}
注意:当数组,字典,集合添加元素时,会使添加的元素引用计数 +1,而对数组,字典,集合release(释放)的时候,同时会给元素发送release消息,让每个元素的引用计数-1
二.多态
多态的真谛:
父类指针 指向 子类对象(应用如 addSubview:UIView,UIView里可以填Button)
例如:一个动物类有两个子类狗和猫,另外一个学生类在调用方法喂食动物的时候,在主函数中用动物类来声明一个狗类和一个猫类,在学生类喂食动物的方法中加入动物类的参数就会调用加入的类的方法,例如参数填入一个用动物类来声明的狗类,就回去调用狗类的方法.
Animals.h:
@interface Animals : NSObject-(void)eat;@end
Animals.m:
@implementation Animals-(void)eat{ NSLog(@"动物吃");}@end
猫狗类分别重写了动物类里面的eat方法
Student类中的喂动物方法:
-(void)eatToAnimals:(Animals *)animal{ Animals *a = animal; [a eat];}
这样调用:
Animals *d = [[Dog alloc]init]; Animals *c = [[Cat alloc]init]; Student *s = [[Student alloc]init]; [s eatToAnimals:c];// 这样结果是输出猫吃
0 0
- 我的iOS学习历程 - OC第十天
- 我的iOS学习历程 - OC第二天
- 我的iOS学习历程 - OC第四天
- 我的iOS学习历程 - OC第六天
- 我的iOS学习历程 - OC第一天
- 我的iOS学习历程 - OC第三天
- 我的iOS学习历程 - OC第五天
- 我的iOS学习历程 - OC第七天
- 我的iOS学习历程 - OC第八天
- 我的iOS学习历程 - OC第九天
- 我的iOS学习历程 - UITextField UIButton
- 我的iOS学习历程 - 自定义视图
- 我的iOS学习历程 - MVC模式
- 我的iOS学习历程 - TargetAction
- 我的iOS学习历程 - 手势
- 我的iOS学习历程 - UISegmentedControl
- 我的iOS学习历程 - UITabBarViewController
- 我的iOS学习历程 - UICollection详解
- ios网络开发
- spin_lock & mutex_lock的区别? .
- C语言/单片机基础训练之划分模块
- 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest C題:Shopping [贪心+并查集]
- WordPress中修改固定链接导致无法显示文章内容的问题的解决办法
- 我的iOS学习历程 - OC第十天
- mysql5.5.24源码编译
- printf的格式控制的完整格式:
- jquery链式操作
- Android存储-file存储
- uva512追踪电子表格
- StringUtil
- 数值分析 幂法求矩阵A按模最大的特征值和相应的特征向量
- 通过adb命令修改文件权限问题