关闭

学习笔记10-OC类的特性

124人阅读 评论(0) 收藏 举报

1     NSString 类

处理字符串的类。

1) 创建常量字符串

NSString  *str =@”abc“;  //str 为指针变量  ”abc“为字符串常量

       NSString  *str=[NSString  new];//使用类new方法创建字符串对象

          str=@“abc“;

       NSString  *str=[NSString  stringWithFormat:@”xxx%d“,i];//使用类方法格式化创建字符串。

NSString  *str1=[[NSString  alloc] initWithString:str]; // 先分配空间之后用str的值初始化 之后把地址返回给str1.

2)NSString   字符串长度计算

       类方法 length

[str length]; //返回值类型为NSUInteger  无符号整形 输出用 ld

OC中

英文和中文都是一个字符 占一个字节。

C 中 中文占3个字节。

2     多文件开发

把声明和实现分开把声明写在.h中 实现在 .m中 在.h中添加import  .m 在主函数中添加头文件。

还可以把 类 按类别放到不同的文件夹中。

3     类方法(+)

    优点:节省内存  提高效率 作为工具方法

对象方法使用的时候必须创建对象,使用对象调用。

类方法使用的时候不需要创建实例对象,不依赖任何对象方法和成员变量。

方法定义和对象方法相似只是前面是 + 号。

调用和对象方法一样。

 

注意

1)    类方法可以和对象方法同名,调用者不一样。

2)    类方法可以继承。

3)    声明和实现同对象方法类似。

4)    类方法只能通过类调用。直接到代码区找类方法。

 

 

4 对象方法和类方法区别

对象方法

1)对象方法可以在方法中创建对象,使用新创建的对象调用对象方法

2)对象方法可以通过 self 调用该类的对象方法。

3)对象作为方法的参数传递过来,可以使用传递过来的对象调用对象方法

类方法

1)类方法可以调用其它的类方法

2)可以使用self 调用其他类方法

3) 类方法中可以调用对象方法  对象作为参数传递或者在类方法中创建对象。

4)类方法不可以调用自身。会成死循环。

5 匿名类

       在方法需要使用调用类方法的时候生成并调用。

       [[Personnew] goHome :[Car new]];

             

6  封装

       作用:隐藏类的实现隐藏数据 掌握对实例变量的管理权。

       原理:实例变量默认为只可被当前类对象访问。

       实现步骤

1)    设置实例变量的setter和getter方法。类似java的set和get。

使用set方法对成员变量赋值,使用get方法获得成员变量的值。

set方法命名规范

a 必须以set开头

b set后面跟成员变量的名称首字母大写。(去掉下划线)。

c 返回值为void。

d 一定要接收一个参数,参数类型和成员变量的类型一致。

e 形参名不能和成员变量名一样。一般去掉下划线的成员变量名。

f  set方法是一个对象方法。

g 实现中一定要给实例变量赋值。

 

              get方法的命名规范

                     a一定要有返回值,返回值类型与成员变量的类型一致

                     b方法名和成员变量名一样。(一般为去掉下划线的成员变量)

                     c 没有参数。

                     d  是对象方法

                     e  实现中一定返回实例变量值。

7 对象和对象关系

1) 组合模式(部分-整体)相同基类的对象组合到树形结构中。

2) 依赖关系 A对象作为B对象的局部变量或者方法的形参 ,B 依赖于A .A和B是依赖关系

耦合度:修改一个对象时,对另一个对象的影响程度。

低耦合:修改一个对象时,对另一个对象的影响小

高内聚:一个对象仅仅做自己相关的事情。

3) 关联关系

一个对象拥有另一个对象

 

8 方法的重载

       同名方法不同参数个数和类型。

       OC中没有方法的重载

9  OC中static关键字。

       static不能修饰实例变量。

       可以在.m文件中作为普通变量使用。只能在本文件中使用。

10 self和super

       self相当于java的this指针 表示当前对象。

      

self应用

谁调用当前方法就指代谁

1) 在对象方法中使用。指代调用当前对象方法的对象。

2) 在类方法中指代当前类。[对象 class]返回当前类(对象)

3) self修饰变量 用以区分实例变量和普通变量

              super 调用父类方法。

11 类的继承和派生

       继承就是子类拥有父类的方法和属性。

       继承的实现

1) 导入父类的头文件

2) 声明子类的时候继承父类

基类和派生类的关系

              派生类可以继承父类(基类)的方法和属性还可以拥有自己的属性和方法。

              注意

1)基类的私有属性不能被继承。

              2)OC中是单继承,一个子类只能继承一个父类。

              3)继承的合理性。可以拥有父子关系。

       方法的重写

子类重新实现父类的方法。不需要声明,已经继承。

 

       继承的注意事项

1) 子类不能定义父类同名变量

2) 单一继承

3) 可以多层继承。

12 实例变量修饰符合作用域

       修饰符

              @public 公有的   任意程序

              @protected 受保护的  同一类或者派生类 子类可以使用

              @private 私有的         同一类中 子类可以继承,不能访问和使用

       修饰符的作用域

声明时(.h):从修饰符出现的地方开始到遇到下一个修饰符或结束。默认为protected。

              实现时(.m):声明的变量都是私有的 不能继承 不能访问。

       私有方法

       .h中没有声明,但是在.m中实现的方法。子类不能继承,不能实现。子类可以通过共有方法调用私有方法。

13 description方法

              NSLog(@”%@”,对象);//打印对象的内容

              实际上调用NSObject类的description方法 打印对象信息。

       重写description方法

-      (NSString *)  description{

NSString *str=@“”;// 可将打印的信息以字符串的形式赋值给str

return   str ;

}

 

14 多态

       多态:某一类事物的多种形态。

       程序中多态:不同的对象以自己的方式响应相同的方法的能力。每个对象都可以有自己的同名方法。

       多态的条件

              有继承关系,有同名方法的重写。   

               基类 * 对象名=[子类 new];//父类的指针指向子类的对象。

       多态的优点

              简化编程借口。容许类和类之间的同名方法。

       多态的实现

1) 基类定义方法并实现(-run())

2) 派生类重写父类的同名方法(-run())

3) 父类指针指向子类对象

基类 * 对象名=[子类 new];

4) 父类指针调用子类方法

[对象名 方法];

       多态的原理

              动态类型可以使直到程序运行时才确定对象所属的类型。

              动态类型绑定能使程序执行时才确定对象调用的实际方法。

              注意

存在多态时,父类可以访问子类特有方法。需要强制类型转换。将父类指针类型转换为子类指针类型。

15 类的本质

              类的本质还是类(类对象)。是另外一个类的对象。

              类对象是一种数据结构,存储的是类的基本信息:类大小,类名,类版本以及消息与函数的映射表。

              类对象代表类。

              class代表类对象,类方法属于类对象。

              Person  *p =[Person]

              p 是Person实例对象

              Person 是class类的类对象

类对象获取

1) 通过实例对象获取

Class  c=[p class];  Person

2) 通过类名对象

Class c =[ Person class];

              类对象的使用

                     可以创建对象Person *p= [c  new]; c可以当Person用

                     可以调用类方法

16类对象的存储

类对象(Person)也在堆区存储。_isa指向代码区。

实例对象(p)_isa 指向类对象的地址。

P指向类对象。

SEL

对方法的包装,表示方法的存储位置。

1) 当实例对象调用方法的时候会把这个方法包装成SEL类型的数据

2) 根据SEL找到对应的方法地址。

3) 根据方法地址调用方法。

使用

Person *p=[Personnew];  // Person类中有方法–eat()

 

SEL  sel =@selectot(eat);

[ p performSelector :sel ]; //响应方法

      

      

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3229次
    • 积分:188
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档