IOS 第一天

第一讲 初始类和对象

c语言的超集,允许在oc中使用c语言源代码。编译器兼容c语言程序

 具备完善的面向对象特性

 包含一个运行时系统

 类库丰富

 

 面向对象编程 oop

 面向对象语言:c++  java   c#

 概念:对象、类、封装、继承、多态等

 面向过程:分析解决问题的步骤,实现函数,依次调用

 面向对象:分析问题组成的对象,协调对象间的联系和通信,解决问题  

 面向对象设计具有良好的可扩展性、可重用性

 类和对象是面向对象的核心

 定义类,创建对象,使用对象

 具有相同特征和行为的事物的抽象    

 对象是类的 实例

 类是对象的类型

 

 //@是OC的标志

//输出的目的: 验证

 面向对象编程中使用对象完成程序

 开发中:先定义类,在创建对象,然后使用对象

 定义类包含两部分:接口部分和实现部分,  分开写

  1.接口部分:对外声明类的特征和行为

 2.实现部分:对内实现行为

 

接口部分.h

接口部分标志:@interface...@end

作用:声明类的实例变量和?方法,即特征和?行为。

包含内容:类名、父类名、实例变量、方法等

规范:

         1.类名:由英文单词组成,每个单词的首字母都要大写,不能出现汉字和拼音.

         2.实例变量: 方法名: 由英文单词组成,除了第一个单词首字母小写,其余均大写,

         3.一般情况下一对.h 和 .m 文件中定义一个类.

//NSObject 是OC中唯一一个没有父类的类. 叫做根类.

 *  类的定义分为两部分:1.接口部分(.h) 2.实现部分(.m文件)

    接口部分:以@interface 开头 + 类名.   : (冒号表示继承)  冒号后是父类名. @end作为结束.

    类的接口部分的内容必须写在@interface 与 @end 之间.

    类的接口部分提供实例变量以及方法的声明.

    类的本质是一种自定义的数据类型.

 1 // Person类的接口
 2 @interface Person : NSObject
 3 {
 4     @public
 5     //实例变量一定要写在大括号内,而且大括号内只能写实例变量.
 6     //对应类的特征:实例变量(等同结构体的结构体成员)
 7     //字符串类型
 8     NSString *name;   //姓名
 9     NSString *gender; //性别
10     //整型
11     NSInteger age;   //年龄
12     //浮点型
13     CGFloat height;   //身高
14 }
15 //-------  类的行为  --- 方法(函数)
16 //void sayHello();  --- C语言的函数
17 - (void)sayHello;   //OC的方法 方法名:sayHello           无返回值无參
18 
19 //int  getMoney();   ---  C语言函数
20 - (NSInteger)getMoney;  // OC的方法 方法名:getMoney       有返回值无參
21 
22 //void outputp(int n);    ---C语言的函数
23 - (void)output:(NSInteger)n; //OC的方法  方法名:output:     无返回值有参
24 
25 //int sumValue(int a, int b, int c);  --- C语言的函数
26 - (NSInteger)sumValueWithA:(NSInteger)a b: (NSInteger)b c: (NSInteger)c;
27   //方法名:sumValueWithA:b:c:
28 
29 
30 - (NSInteger)minGBWithA:(NSInteger)a b:(NSInteger)b;  //求最小公倍数
31    //方法名: minGBWithA:b:
32 
33 @en 

实现部分 .m

实现部分标志:@implementation...@end

作用:实现方法 即实现类的行为.

 1 #import "Person.h"
 2 /**
 3  *  类的实现部分:以@implementation 开头 + 实现类名.  
 4     @end 作为结束
 5     类的实现代码必须写在@implementation 与 @end 之间才有效
 6     类的实现主要是方法的实现
 7  */
 8 @implementation Person
 9 - (void)sayHello {
10     NSLog(@"Hello, 美女");
11 }
12 
13 - (NSInteger)getMoney {
14     return 100;
15 }
16 
17 -(void)output:(NSInteger)n {
18     NSLog(@"n = %ld",n);
19 }
20 
21 -(NSInteger)sumValueWithA:(NSInteger)a b: (NSInteger)b c: (NSInteger)c {
22         return a + b + c;
23 
24 }
25 
26 -(NSInteger)minGBWithA:(NSInteger)a b:(NSInteger)b {
27     //1.存储a b的值
28     NSInteger tempA = a;
29     NSInteger tempB = b;
30     //2.求最大公约数
31     NSInteger temp = a % b;
32     while (temp != 0) {
33         a = b;
34         b = temp;
35         temp = a % b;
36     }
37     return tempA * tempB / b;
38 }
39 
40 @end

  面向过程:以过程为核心,注重的是完成事件的详细步骤,一步步如何实现.

    面向对象:以事物为核心,注重的是参与该事件的事物的应具备的功能,而完成该事件只是事物所有功能中的一个功能.

 *  OO:(Object Oriented)面向对象.

    OOP:(Object Oriented Programming)面相对象编程.

    类:具有相同特征以及行为的事物的抽象,它是抽象的概念,不具体.

    对象:类的实例,类的具体体现,生活中的万物都是对象.

如何通过类来创建对象?

创建对象一共分两步:1.开辟空间(堆区) 2.初始化

OC中的方法的调用形式.

 消息发送机制 [receiver message]

id等同于void *, 泛型, 可以代表所有的对象

main.m

   Person *per = [[Person alloc] init];
        [per sayHello];
        NSInteger sum = [per sumValueWithA:10 b:5 c:4];
        NSLog(@"sum  = %ld", sum);
        NSInteger minGB = [per minGBWithA:10 b:6];
        NSLog(@"minGB = %ld",minGB);
        [per output:5];
  //访问实例变量
        Person *per = [[Person alloc] init];
        per->name = @"Frank";
        per->gender = @"m";
        per->age = 18;
        per->height = 180;
        //输出实例变量的值
        NSLog(@"name = %@", per->name);
        NSLog(@"gender = %@", per->gender);
        NSLog(@"age = %ld", per->age);
        NSLog(@"height = %f", per->height);

 总结: 

类和文件

类:@interface...@end @implementation...@end

?文件:.h称为接?口?文件或头?文件,.m称为实现?文件。默认设 置如下:

1. 使?用类名命名?文件。

2. .h?文件管理类的接?口部分;.m?文件管理类的实现部分

?文件和类本质没有关系,为了?方便管理、实现封装特性

 

创建对象

创建对象分两步:分配内存空间和初始化。

分配内存空间:根据类中声明的实例变量为对象分配内存,

将所有实例变量置为默认值0,并返回?首地址。 初始化:为对象的实例变量设置初始值

分配内存空间:Person * p = [Person alloc];

初始化:p = [p init]; 通常这两部操作需要连写:

Person * p = [[Person alloc] init];

+ (id)alloc; +表?示这个?方法属于类,只能类执?行。id返回值 类型,表?示任意类型的对象,即创建好的对象。

- (id)init; -表?示这个?方法属于对象,只能对象执?行。id返回值 类型,表?示初始化完成的对象。

 

初始化

- (id)initWithName:(NSString *)name age:(NSInteger)age {
    //[self init] 是调用本类对init方法的实现
    //[super init] 是调用父类对init方法的实现
    //如果子类没有重写init方法,则使用[self init] 与 [super init] 完全一样
    //但是如果子类重写init 方法,则有区别.
    self = [super init];
    if (self) {
        _name = name;
        _age = age;
    }
    return self;
}

 

使用对象

指针存储对象的?首地址,代指对象。OC中使?用指针代指对 象,进?行操作。

Person * p = [Person alloc]; 先执?行“=”右侧

1. [Person alloc]返回值是对象的?首地址,即对象。

2. p是跟对象同类型的指针变量,存储对象?首地址,代指对象

int main(int argc, const char * argv[])

{

    Student *zhangsan = [[Student alloc] init];

    [zhangsan sleep];

 

操作实例变量

实例变量在初始化只做少量设置,后期还需要进?行设置。

实例变量区分可?见度,共三种。这节课使?用public @public:实例变量访问修饰符号(公有)。

@interface Lesson : NSObject
{
//@public//公有的,用public 修饰的变量。可以在任何文件访问
//    @protected//受保护的,仅能在自己类和子类里访问
    @private//私有的,仅能在自己类里访问
    NSString *_name;//实例变量前加下划线(不成文规定)区别其他变量
    NSString *_sex; //string  字符串
    NSInteger _age;

 语法细节,注意事项

l  成员变量不能在{}中进行初始化、不能被直接拿出去访问

l  方法不能当做函数一样调用

l  成员变量\方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)

l  类的实现可用写在main函数的后面,主要在声明后面就行了

l  C函数不能访问OC对象的成员

l  方法只有声明,没有实现(经典错误)

l  方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)

l  编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。