自学iOS开发系列----OC(类和对象)
2016-11-21 13:30
363 查看
学习一门新的语言跟玩一个新游戏差不多,下载游戏(开发工具),熟悉游戏规则(了解开发工具如何使用),看解说视频(看书籍,博客,开发视频),自己多玩几次(多练习敲代码),慢慢的就入门,然后掌握,然后精通。
OC阶段我计划用11个篇幅来概述:类和对象、字符串、数组、字典、点语法、继承和类别、文件操作、JSON解析、内存管理、协议代理、Blocks。
开篇之前再次重申一遍,本系列以实战为主,理论为辅,目的是帮助小白快速入门。
1.OC是一门用于编写iOS和OS X的面向对象语言。OC是C语言的超集,OC完全兼容C。
2.C语言中用#include导入头文件,OC中用#import导入头文件可以防止重复导入
3.类命名规范:首字母大写,遵循波浪原则,驼峰原则,之后的每个单词首字母均大写:FirstClass
4.面向过程和面向对象概念解析
【面向过程】直接和CPU交流,关注的主要是数据,存储数据和操作数据,侧重数学逻辑。
案例:公园周长500米,有个美女,速度为100m/min,这个美女跑多长时间能跑完这段路?
路程/速度
【面向对象】添加一个能够接受信息的单元(对象),每个单元拥有自己的功能,各个单元合作,完成程序,侧重生活逻辑。
案例:公园周长500米,有个美女,速度为100m/min,这个美女跑多长时间能跑完这段路?
此案例有两个对象:公园和美女
5.类和对象的定义
类:同一个类型的对象的抽象
对象:类的具体形式
类: 水果 蔬菜
对象: 苹果、梨、香蕉 西红柿、冬瓜、白菜
6.类方法和对象方法
“+”表示这个方法是一个类方法,调用的时候需要使用类来调用
“-“ 表示这个方法是一个对象(成员)方法,调用的时候需要使用类的对象来调用
7.类方法的特点
①类方法不能使用成员变量
②可以和成员方法同名,并且调用的时候互不干扰。
③类方法中不能直接调用成员方法
8.类方法的作用
①使用类方法可以用来创建类的对象
②快速的调用类里面的方法(单例)
9.创建一个简单类
①新建一个项目(参照Xcode使用 )
②command+N选择Cocoa Touch Class
![](https://img-blog.csdn.net/20161121131655130)
③为新建类命名Dog
![](https://img-blog.csdn.net/20161121131728927)
④创建类成功,生成.h和.m文件,.h文件用作声明,.m文件主要用作实现(OC阶段暂时用不到AppDelegate和ViewController,故暂不需要做深入研究和讲解)
![](https://img-blog.csdn.net/20161121131805380)
10.创建一个对象
在main.m中导入头文件#import “Dog.h”
Dog为类,dog为对象
![](https://img-blog.csdn.net/20161121131847818)
Dog.h文件
Dog.m文件
main.m文件
【注】单例是一种设计模式,它确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
10.类的复合
一条公路,长度是300Km,有一个小汽车,速度为50Km/h,这个小汽车跑多长时间跑完这段路。
①新建一个Road类
Road.h文件
Road.m文件
②新建Card类
Card.h文件,导入#import “Road.h”
Card.m文件
③main.m文件
在main.m文件导入头文件#import “Car.h”和#import “Road.h”
小练习:创建两个立方体,长宽高分别为4,5,6和7,8,9,问两个立方体的体积是多少?
参考答案(一万个读者有一万个哈姆雷特,一万个程序员有一万种编码风格,答案仅供参考)
Cube.h文件
Cube.m文件
OC阶段我计划用11个篇幅来概述:类和对象、字符串、数组、字典、点语法、继承和类别、文件操作、JSON解析、内存管理、协议代理、Blocks。
开篇之前再次重申一遍,本系列以实战为主,理论为辅,目的是帮助小白快速入门。
1.OC是一门用于编写iOS和OS X的面向对象语言。OC是C语言的超集,OC完全兼容C。
2.C语言中用#include导入头文件,OC中用#import导入头文件可以防止重复导入
3.类命名规范:首字母大写,遵循波浪原则,驼峰原则,之后的每个单词首字母均大写:FirstClass
4.面向过程和面向对象概念解析
【面向过程】直接和CPU交流,关注的主要是数据,存储数据和操作数据,侧重数学逻辑。
案例:公园周长500米,有个美女,速度为100m/min,这个美女跑多长时间能跑完这段路?
路程/速度
【面向对象】添加一个能够接受信息的单元(对象),每个单元拥有自己的功能,各个单元合作,完成程序,侧重生活逻辑。
案例:公园周长500米,有个美女,速度为100m/min,这个美女跑多长时间能跑完这段路?
此案例有两个对象:公园和美女
5.类和对象的定义
类:同一个类型的对象的抽象
对象:类的具体形式
类: 水果 蔬菜
对象: 苹果、梨、香蕉 西红柿、冬瓜、白菜
6.类方法和对象方法
“+”表示这个方法是一个类方法,调用的时候需要使用类来调用
“-“ 表示这个方法是一个对象(成员)方法,调用的时候需要使用类的对象来调用
7.类方法的特点
①类方法不能使用成员变量
②可以和成员方法同名,并且调用的时候互不干扰。
③类方法中不能直接调用成员方法
8.类方法的作用
①使用类方法可以用来创建类的对象
②快速的调用类里面的方法(单例)
9.创建一个简单类
①新建一个项目(参照Xcode使用 )
②command+N选择Cocoa Touch Class
③为新建类命名Dog
④创建类成功,生成.h和.m文件,.h文件用作声明,.m文件主要用作实现(OC阶段暂时用不到AppDelegate和ViewController,故暂不需要做深入研究和讲解)
10.创建一个对象
在main.m中导入头文件#import “Dog.h”
Dog为类,dog为对象
Dog.h文件
#import <Foundation/Foundation.h> //类的声明 @interface Dog : NSObject { //成员变量 int _age; int _weight; } + (Dog *)defaultDog; //类方法 - (void)sleeping; //对象(成员)方法 + (void)sleeping; //成员方法和类方法可以同名 @end
Dog.m文件
#import "Dog.h" static Dog * wangwang = nil; //类的实现 @implementation Dog //单例 + (Dog *)defaultDog { if (wangwang == nil) { wangwang = [[Dog alloc] init]; } return wangwang; } - (void)sleeping { _name = @"wangwang"; NSLog(@"这是一个成员方法"); } + (void)sleeping { //类方法不能使用成员变量,成员方法也不能直接调用 Dog * dog2 = [[Dog alloc] init]; [dog2 sleeping]; NSLog(@"这是一个类方法"); } @end
main.m文件
#import <Foundation/Foundation.h> #import "Dog.h" //导入的时候 都是选择.h文件 禁止导入.m int main(int argc, const char * argv[]) { @autoreleasepool { //父类已实现的方法 子类都可以直接用 Dog * dog1 = [[Dog alloc] init]; [dog1 sleeping]; //使用类名调用类方法,类方法没有空间 [Dog sleeping]; //单例 [[Dog defaultDog] sleeping]; } return 0; }
【注】单例是一种设计模式,它确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
static Dog * wangwang = nil; + (Dog *)defaultDog { if (wangwang == nil) { wangwang = [[Dog alloc] init]; } return wangwang; }
10.类的复合
一条公路,长度是300Km,有一个小汽车,速度为50Km/h,这个小汽车跑多长时间跑完这段路。
①新建一个Road类
Road.h文件
#import <Foundation/Foundation.h> @interface Road : NSObject { int _length; //公路长度 } //设置长度 - (void)setLength:(int)length; - (int)length; @end
Road.m文件
#import "Road.h" @implementation Road - (void)setLength:(int)length { _length = length; } - (int)length { return _length; } @end
②新建Card类
Card.h文件,导入#import “Road.h”
#import <Foundation/Foundation.h> #import "Road.h" @interface Car : NSObject { int _speed; //速度 } //设置速度 - (void)setSpeed:(int)speed; - (void)runOnRoad:(Road *)road; @end
Card.m文件
#import "Car.h" @imp c583 lementation Car - (void)setSpeed:(int)speed { _speed = speed; } - (void)runOnRoad:(Road *)road { int roadLength = [road length]; //路程 NSLog(@"需要时间为:%dh",roadLength/_speed); } @end
③main.m文件
在main.m文件导入头文件#import “Car.h”和#import “Road.h”
#import <Foundation/Foundation.h> #import "Car.h" #import "Road.h" int main(int argc, const char * argv[]) { @autoreleasepool { Road * road = [[Road alloc] init]; [road setLength:300]; Car * car = [[Car alloc] init]; [car setSpeed:50]; //让车跑在路上,看需要多少时间 [car runOnRoad:road]; } return 0; }
小练习:创建两个立方体,长宽高分别为4,5,6和7,8,9,问两个立方体的体积是多少?
参考答案(一万个读者有一万个哈姆雷特,一万个程序员有一万种编码风格,答案仅供参考)
Cube.h文件
@interface Cube : NSObject { int _length; int _wide; int _height; } -(void)setLength:(int)length; -(void)setWide:(int)wide; -(void)setHeight:(int)height; -(int)getArea; @end
Cube.m文件
@implementation Cube -(void)setLength:(int)length { _length=length; } -(void)setWide:(int)wide { _wide=wide; } -(void)setHeight:(int)height { _height=height; } -(int)getArea { return _length*_wide*_height; } @end
相关文章推荐
- 自学iOS开发系列----OC(Xcode使用)
- 自学iOS开发系列----OC(字符串)
- 自学iOS开发系列----OC(属性、点语法、修饰符)
- 自学iOS开发系列----OC(字典)
- [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等
- 自学iOS开发系列----OC(数组)
- 自学iOS开发系列----OC(继承)
- 自学iOS开发系列----OC(block)
- 自学iOS开发系列----OC(文件管理类、文件句柄类)
- 自学iOS开发系列----OC(内存管理)
- 自学iOS开发系列----OC(类别和扩展)
- 自学iOS开发系列----OC(协议和委托代理)
- 小白学开发(iOS)OC_匿名对象(2015-07-24)
- 【IOS 开发学习总结-OC-8.2】★★ objective-c面向对象之——类和对象(下)
- 小白学开发(iOS)OC_self 与 类方法 和 对象方法(2015-07-25)
- iOS开发之OC类和对象
- 黑马程序员——ios开发基础之OC中的面向对象以及对象特性
- iOS开发系列--Objective-C之类和对象
- 【IOS 开发学习总结-OC-15】objective-c面向对象之——对象初始化
- iOS开发系列--Objective-C之类和对象