iOS学习010

来源:互联网 发布:修改了mac用户名 编辑:程序博客网 时间:2024/06/06 07:27
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类的消息断裂,因为类目中的方法优先级更高,因此一般不覆盖类   目中的方法

 //类目和子类继承有什么异同点:

 //不能在类目里面添加属性,变量,只能添加方法

//共同点 子类:可以扩展父类的方法

      类目:可以扩展原有类的方法

//不共同点 子类:可以添加属性,实例变量

       类目:不能在类目里面添加属性,变量,只能添加方法

 //扩展方法的调用

       子类:用子类的对象调用扩展方法

       类目:用原有类的对象调用

 

 


0 0