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 编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。