您的位置:首页 > 移动开发 > IOS开发

iOS学习009

2015-06-21 16:26 399 查看
20150621OC-阶段性总结
1.类和对象

.h文件和.m文件的作用

:苹果公司为了方便程序员产看变量声明,方法的声明。原则上希望大家把变量和方法的声明放在.h文件中编写,把方法的实现放在.m文件中实现。

:只有放在.h文件中的方法和变量,才可以被别的对象调用

:引入系统框架,Fuondation框架中包含所有的oc相关的类,只有引入框架,才能使用框架中的类

#import <> 引入的是系统框架 苹果提供的类

#import"" 引入用户自己定义的类

:C面语言用的是#include

#import 可以避免重复包含。A引入了C框架 B 也引入了C框架 当A引入B时,C框架在A中是引入两次,#import可以自动取消重复引用的框架,保持永远引入一次。

@interface 声明的关键词 可以翻译为接口

student @interface 关键词后面的 就是类名 : 后面的父类名

所有的oc的类都要有一个父类,NSobject就是oc中最基础的类

@interface Student : NSObject

{

//添加一个{}写成员变量 或者叫 类的属性

// 定义一个成员变量保存年龄,定义的变量名有单词组成,第一个单词首字母要小些。习惯上加一个下划线_,表示成员变量

// @private,@protect @public oc默认@protect

int _age ;

// 定义一个浮点型身高变量,保存身高

float _height;

// 定义一个成员变量浮点型,保存体重

float _weight;

}

//类要使用必须创建代表类的对象,也就是说生成一个 student类型的变量,我们管这人个过程叫做列化。

//类的初始化方法:每个类都至少有一个初始化方法

//符号-代表方法的类型是 实例方法 或者成为对象方法

//初始化方法 负责完成对某些变量的赋值。init 翻译为初始化(开辟内存) id是一个泛类型。可以代表任何类型

- (id)init;

2.属性
:属性 是描述类的特征的;最终目的是:赋值和取值

:main 函数是一个应用程序的入口

:使用类创建一个对象,先导入这个接口文件.h文件

:alloc:为对象开辟内存空间,init:给对象实例化,初始化,创建这个对象,这个函数叫做构造函数。

GirFrind *baby = [[GirFrind alloc]init];

创建对象的公式 类名* 对象名 = [[类名 alloc]init]

类是对一个事物的高度抽象,可以使用这个类创建多个对象

每一个对象和另外一个都不是同一个东西

3.面向对象
:面向对象(oc)面向过程(C语言)
:类:class
:接口文件:interface .h文件
:init 叫构造函数:用来创建,实例化一个对象。
:自定义构造函数,也是用来创建,实例化一个对象。
Heros *jianSheng = [[Heros alloc]init];
setter 赋值
[jianSheng setLv:200];
getter 取值
[jianSheng lv];

NSLog(@"剑圣的等级%ld级",[jianSheng lv]);
:不用传参的,有返回值的函数
: - (返回值类型)函数名
: return 返回值;
有返回值函数的意义
有返回值函数就相当于返回值类型的一个实际值
- (int)aa//aa这个函数就是int类型的数字
{
return 15;
}*/
需要传参的有返回值的
- (int)sumWithA:(int)a bb:(int)b
{
return sum;
}
4.在OC中 数组、可变数组、字典、可变字典的区别:
数组:
数组的初始化空数组: NSArray *array = [[NSArray alloc ] init ];
数组的初始化并添加多个元素:NSArray *array = [NSArray arrayWithObjects:@"",@"", nil];
或者:NSArray *array = @[@"",@""];
数组的取值通过数组下标取值:[array objectAtIndex:0];
或者:NSArray *dd = array[0];
可变数组:
可变数组的初始化:NSMutableArray *array = [[NSMutableArray alloc]init];
NSMutableArray *array1 = [NSMutableArray array];
NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"",@"",nil];//初始化并添加多个元素
可变数组添加元素:[array addObject:@"" ];
数组的遍历: for (id obj in group){//id obj 数组里的每个元素 in 表示在哪里 group要遍历的数组
NSLog(@"%@",obj);
字典:
字典的初始化: NSDictionary *dic1 = [NSDictionary dictionary];

字典的初始化并添加多个元素: NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"object",@"key",@"object1",@"key1", nil];

或者: NSDictionary *dic3 = @{@"key2":@"object2",@"key3":@"object3”};
字典的取值:[dic3 objectForKey:@"key2”];
可变字典:

初始化并添加元素: NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setObject:@"liLa" forKey:@"name1”];
NSLog(@"%@",dic);
5.封装、继承、多态

:面向对象的三大特征:封装,继承,多态

:封装:就是把具体的对象抽象化 把相同类型的对象抽象成一个类

:封装的好处:可以提升代码的复用性;私有变量的安全性;提供代码的可读性

继承:子类拥有父类的全部属性和方法

:子类就是继承的类;父类(超级类):被继承的类

:子类独有的父类不能使用

:子类可以拓展父类的方法和属性同时也可以添加变量

:oc中没有多继承,但可以多级继承

:多态:一个事物的多样性,多种形态,不同的状态

如果父类拥有的方法,子类不希望使用那种实现方式 可以重新写这个方法

:调用父类本身的方法 添加自己独有的方法

[super life];

例如:
NSLog(@"%@是个人类活着",self.name);

Person * jzq = [[Person alloc]init];
jzq.name = @"机智强";
[jzq life];

Person *tangSeng = [[Person alloc]init];
tangSeng.name = @"唐僧";
[tangSeng back];

Animal * daHUang = [[Animal alloc]init];
daHUang.name = @"大黄";
[daHUang life];

Animal *xaioHuang = [[Animal alloc]init];
xaioHuang.name = @"小黄";
[xaioHuang back];

Person *Jobs = [[Person alloc]init];
Jobs.age = 60;
NSLog(@"乔布斯的年龄 = %d岁",Jobs.age);
6.数组嵌套,字典嵌套
数组套数组
有两个班级
NSArray *class1 = @[@"tome",@"merry",@"lucy",@"tedy",@"summer"];
NSArray *class2 = @[@"aa",@"bb",@"cc"];
// 放在一个年级里
// NSArray *allClasses = @[class1,class2];
// NSLog(@"%@",allClasses[1][1]);//取class2的bb
数组套字典
// NSDictionary *classes1 = @{@"001":@"halibote",@"002":@"rulai",@"003":@"姜子牙jianziya"};
// NSDictionary *classes2 = @{@"001":@"dage",@"002":@"xiaog",@"003":@"jlihu"};
// NSArray *allClass1 = @[classes1,classes2];
// NSLog(@"%@",allClass1[0][@"003"]);

字典套字典

NSDictionary *aa = @{
@"name":@"David Beckham",
@"age":@(38),
@"gender":@"true"};
NSDictionary *bb = @{
@"name":@"Victoria Beckham",
@"age":@(39),
@"team":@"Spice Girls"};
NSArray * cc = @[@"Brooklyn",@"Romeo",@"Cruz",@"Harper"];
NSDictionary *family =@{@"hasbend”:aa,@"wife":bb,@"childrens":cc} ;
NSLog(@"丈夫的信息%@",family[@"hasbend"]);
NSLog(@"妻子的信息%@",family[@"wife"]);
NSLog(@"%@ 的妻子是 %@ 他们的孩子分别是:%@",family[@"hasbend"][@"name"],family[@"wife"][@"name"],family[@"childrens"]);
7.数据模型

WifieModel *wife = [[WifieModel alloc]init];
wife.name = message[@"wife"][@"name"];
wife.age = [message[@"wife"][@"age"] intValue];
wife.team = message[@"wife"][@"team"];
Man *man = [[Man alloc]init];
man.name = message[@"name"];
man.age = [message[@"age"]intValue];
man. gender = message[@"gender"];
man.wife = wife;
man.childList = childArray;
NSLog(@"%@",man);
8.类目
类目:(category)的基本概
: 类目是在原有类的基础之上添加方法,在使用的时候只需要用原有类实例化出来的对象调用即可
:在实际开发中的使用情况:扩展已经封装好的类 (不希望 再改变原有类)团队里面分工开发一个模块的时候
:如果类目中覆盖现有类的方法。会引起super类的消息断裂,因为类目中的方法优先级更高,因此一般不覆盖类 目中的方法

//类目和子类继承有什么异同点:
//不能在类目里面添加属性,变量,只能添加方法
//共同点 子类:可以扩展父类的方法
类目:可以扩展原有类的方法
//不共同点 子类:可以添加属性,实例变量
类目:不能在类目里面添加属性,变量,只能添加方法
//扩展方法的调用
子类:用子类的对象调用扩展方法
类目:用原有类的对象调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: