首页 > 代码库 > IOS 第一天

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  编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告

IOS 第一天