iOS学习路之Objective-C(一)
1:类和对象
1:oc简介
1:oc是完全兼容c的
2:oc在c的基础上增加一层最小的面向对象的语法
3:写oc工程的时候可以混入c的代码,甚至是c++的代码
4:通过oc语言可以开发ios或os x平台下应用程序
2:编程思想
1:面向过程
2:面向对象
3:面向过程编程
面向过程编程代表:c
过程:实现某个应用程序所经历的步骤,每一个步骤对应一个功能,该功能可以通过一个自定义的函数来实现
面向过程编程:首先分析实现该应用程序功能需要经历几个步骤,每个步骤通过一个自定义的函数来实现,最后把所有的函数进行整合,实现整个程序功能
例子:
在有序数组中插入一个数
1:输入————>input
2:输出————>output
3:排序————>sort
4:输出————>output
5:插入————>insert
6:输出————>output
整合:input,output,sort,insert
4:面向对象编程
面向对象编程代表:c++, java, oc
类:类就相当于图纸,类中有对象的属性和行为
对象:对象就是类的实例化,根据类中不同的属性值和具体的行为实例化出不同的对象
面向对象:关心的是需要创建多少个类,实例化多少个对象,调用对象的那些方法
面向对象编程:首先要知道谁(对象)既有解决程序功能,将对象的属性和行为进行封装形成了类,通过类实例化出对象,调用对象的方法实现程序功能
1:类和对象
1:现实生活
类 对象
人 陈超(开放式教学),比尔盖茨(微软),乔布斯(Apple),马云(淘宝)
美女 高圆圆,陈意涵,熊黛林,梁静茹,周冬雨,张雨绮,吴佩慈
帅哥 陈超,chen chao, I, I am, Me , Me too, Yes i am, 吴彦祖,1516全体男人
猫 哆啦A梦,蓝猫,加菲猫,Tom,叮当猫,龙猫,大熊猫
狗 旺财,大黄,小白,小黑,秋田,啸天犬,小泉
2:封装的角度
结构体:是对不同数据类型变量的封装 struct student { int num; char name[20]; };
函数:是对功能代码的封装
int add(int a, int b) { int c = a+b; return c; }
类:类是对数据和代码的封装
对象:对象就是类的实例化
3:编程的角度
类:就是一个自定义的数据类型(类中既有属性又有方法)
对象:同过类这种自定义的数据类型定义出的变量
4:官方的角度
类:对象属性和行为的抽象
对象:类的实例化
5:总结
1:对象
世间万物皆对象,对象是类的实例化
2:类
具有相同或相似性质的对象的抽象就是类。
对象的抽象是类,类的实例化是对象。
3:对象的属性和行为
对象具有属性,通过数据值来描述它的属性
对象具有操作,用于改变对象的属性值,操作就是对象的行为
对象实现了数据和操作的统一封装
4:类的属性和行为
类具有属性,他是对象属性的抽象,用数据结构来描述类的属性。
类具有操作,他是对象操作的抽象,用函数的声明和实现来描述类的操作。
5:具体事例理解类和对象
例子:生产车
生产车的图纸:车的相关属性(轮子个数,时速)和行为(跑)
车:根据图纸中车的不同的属性值和具体的行为
例子:自行车
属性:
轮子个数:2
时速: 20km/h
行为:
跑:以20km/h速度跑起来
例子: 三轮车
属性:
轮子个数:3
时速: 30km/h
行为:
跑:以30km/h速度跑起来
例子: 劳斯莱斯,法拉利,宾利,迈凯轮,柯尼塞格,兰博基尼,玛莎拉蒂,布加迪
属性:
轮子个数:4
时速: 400km/h
行为:
跑:以400km/h速度跑起来
生产车的图纸:车的相关属性(轮子个数,时速)和行为(跑)——>模型——>类
车:根据图纸中车的不同的属性值和具体的行为—>对象
5:Xcode创建oc工程
create a new Xcode project——>Application下的Commmond Line Tool——>填写工程名,type选择Foundation——>选择存储工程路径
6:c和oc进行比较
1 /* 2 文件后缀名: 3 c: .c 4 oc: .m 5 */ 6 7 /* 8 字符串: 9 c : "字符串" 10 oc: @"字符串" 11 @: oc中基本上所有的关键字都是以@开头 12 // 基本上所有关键字都是以@开头 13 // 下面列举一些常见的关键字,看一眼就行了,不用去翻资料查找它们的含义 14 // @interface、@implementation、@end 15 // @public、@protected、@private、@selector 16 // @try、@catch、@throw、@finally 17 // @protocol、@optional、@required、@class 18 // @property、@synthesize、@dynamic 19 // self、super、id、_cmd、__block、__strong、__weak、 20 // 21 */ 22 23 /* 24 文件包含: 25 c: #include <>, "" 26 不能防止头文件重复包含: 27 #ifndef _HEAD_H 28 #define _HEAD_H 29 30 #end 31 oc: #import: 自动防止头文件重复包含 32 */ 33 34 35 /* 36 <Foundation/Foundation.h> 37 Foundation:oc中常用的框架 38 Foundation.h:Foundation:oc框架的主头文件 39 */ 40 41 /* 42 输出函数 43 c: printf 44 oc: NSLog----->NSLog(@"输出的内容");---->打印对象%@ 45 */ 46 #import <Foundation/Foundation.h> 47 48 int main(int argc, const char * argv[]) { 49 @autoreleasepool {//自动释放池---->内存管理 50 /* 51 内存管理: 52 MRC:手动内存管理 53 ARC:自动内存管理 54 */ 55 // insert code here... 56 NSLog(@"Hello, World!");//作用:将字符串Hello, World!输出 57 } 58 return 0; 59 }
7:Xcode中创建类
例子:创建一个person类
实例变量(属性):年龄和姓名
方法(行为):跑步(不带参数),吃饭(一个参数)和打印person信息(两个参数)
Person类
Person.h
1 //oc中创建一个类会出现两个文件 2 //.h:类的声明 3 #import <Foundation/Foundation.h> 4 5 /* 6 @interface Person : NSObject 7 @interface:类声明的关键字 8 Person:创建类的名字 9 :冒号---->继承(冒号的左边子类,冒号的右边父类) 10 NSObject: oc的基类 11 */ 12 @interface Person : NSObject { 13 //类中实例变量的声明 14 //oc中的实例变量的名字都是以下划线_开头 15 /* 16 实例变量的访问属性: 17 @public: 共有访问 18 1:类中的方法可以直接访问, 类外的对象可以直接访问 19 2:子类中的方法可以直接访问,子类的对象可以直接访问 20 @protected: 保护访问(默认) 21 1:类中的方法可以直接访问, 类外的对象不可以直接访问 22 2:子类中的方法可以直接访问,子类的对象不可以直接访问 23 @private: 私有访问 24 1:类中的方法可以直接访问, 类外的对象可以直接访问 25 2:子类中的方法不可以直接访问,子类的对象不可以直接访问 26 */ 27 int _age;//年龄 28 NSString *_name;//oc中所有的对象都是指针 29 // char name[20];//姓名 30 } 31 //方法的声明 32 /* 33 类中方法: 34 1: - :对象方法,可以直接访问类中的实例变量,对象来调用该方法 35 2: + :类方法,不能直接访问类中的实例变量(静态方法static), 类名调用该方法 36 */ 37 //不带参数的方法 38 //-: 表示该方法是对象方法 39 //(void): 该方法的返回值类型--->在oc中的方法里,所有出现数据类型的地方都放在小括号 40 //run: 方法名 41 - (void)run;//oc 42 //void run(void);//c 43 44 //带一个参数的方法 45 //-: 表示该方法是对象方法 46 //(void): 该方法的返回值类型--->在oc中的方法里,所有出现数据类型的地方都放在小括号 47 //(NSString *)foodName: 方法的参数, (NSString *)数据类型,foodName参数的名字 48 //eat+:冒号:冒号也是方法名的一部分 49 //: --->冒号的前面是方法名的一部分,冒号的后面是方法参数--->冒号的个数和方法中参数的个数相等的 50 - (void)eat: (NSString *)foodName; 51 52 //带两个参数的方法 53 //-: 表示该方法是对象方法 54 //(void): 该方法的返回值类型--->在oc中的方法里,所有出现数据类型的地方都放在小括号 55 //(int)age (NSString *)name:该方法的两个参数,分别是整形和字符串类型 56 //方法名:descPerson: andName: 57 - (void)descPerson: (int)age andName: (NSString *)name; 58 59 @end
Person.m
1 //.m:类的相关实现 2 #import "Person.h" 3 //@implementation:类实现关键字 4 @implementation Person //类方法的实现 5 - (void)run 6 { 7 NSLog(@"running.................."); 8 } 9 - (void)eat:(NSString *)foodName 10 { 11 NSLog(@"eat : %@", foodName);//输出字符串格式控制%@ 12 } 13 - (void)descPerson:(int)age andName:(NSString *)name 14 { 15 NSLog(@"age is %d name is %@", age, name); 16 } 17 @end
8:实例变量的setter和getter方法
例子:
要求:创建一个Student类
实例变量:年龄和姓名
方法:实例变量的setter和getter
Student类
Student.h
1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject{ 4 int _age;//年龄 5 NSString *_name;//姓名 6 } 7 8 /* 9 思考:为什么要有setter和getter方法 10 setter: 外界能够修改当前实例变量的值 11 getter: 外界能够获取当前实例变量的值 12 每一个实例变量都有一个和它对应的setter和getter方法 13 */ 14 #pragma mark age的setter和getter方法的声明 15 - (void)setAge: (int)age;//set方法名: set+实例变量的名(首字母大写) 16 - (int)age;//get方法:实例变量的名字 17 18 #pragma mark name的setter和getter方法声明 19 - (void)setName: (NSString *)name; 20 - (NSString *)name; 21 22 @end
Student.m
1 #import "Student.h" 2 3 @implementation Student 4 5 #pragma mark age的setter和getter方法的实现 6 - (void)setAge: (int)age{ 7 _age = age; 8 } 9 - (int)age{ 10 return _age; 11 } 12 13 #pragma mark name的setter和getter方法实现 14 - (void)setName: (NSString *)name{ 15 _name = name; 16 } 17 - (NSString *)name{ 18 return _name; 19 } 20 21 @end
9:通过类实例化对象,并且通过对象调用方法
1 #import <Foundation/Foundation.h> 2 #import "Student.h"//包含student类声明的文件 3 4 int main(int argc, const char * argv[]) { 5 @autoreleasepool { 6 #if 0 7 //实例化student类的对象 8 //oc中调用方法: [对象名/类名 方法名] 9 //alloc:类方法 10 //init: 对象方法 11 Student *std = [Student alloc];//alloc: 堆上创建一个student类对象,并把该对象的首地址进行返回//oc中所有对对象的操作都是通过指针来操作的//oc的对象都是指针 12 std = [std init];//init: 对该对象进行初始化 13 #endif 14 #if 0 15 Student *std = [Student new];//new = alloc + init 16 #endif 17 //实例化student类对象 18 Student *std = [[Student alloc] init];//创建对象的方法:先alloc后init 19 //init初始化后实例变量的值默认是0获知nil 20 //_age, _name 21 //调用age的getter方法 22 NSLog(@"age is %d name is %@", [std age], [std name]); 23 //age和name的setter方法 24 [std setAge:18]; 25 [std setName:@"chen chao"]; 26 NSLog(@"age is %d name is %@", [std age], [std name]); 27 } 28 return 0; 29 }
(未完待续……)
10:init和dealloc
11:类方法
12:面向对象和面向过程的直观感受
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。