您的位置:首页 > 职场人生

【黑马程序员】-OC基础知识总结

2015-03-23 19:55 288 查看
------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
oc相对于c来说是一种思想的转变,由原先的面向过程,转变为面向对象。对于一个事情的完成不再仅仅是对于过程的分析,而是怎么通过对象去完成。利用现有的手段去完成要达到的目的。在oc代码中完全可以混入c语言,甚至是c++,只不过文件的后缀改为了.m文件。

一、OC语法

1、基本上以@开头,也有不包含@的关键字。

2、字符串以@开头,比如@“hello”。

3、其他语法

数据类型主要有:char, int, double, BOOL(Y/N), nil(相当于NULL或0)。屏幕输出用到:NSLog(@".....")。

4、OC开发过程:.m文件,通过编译产生.o文件,再通过连接产生a.out可执行文件。可执行文件的名称在连接时也可以自己从新定义。

5、在今后的代码中,#include被#import取代。#import与#include的作用有些类似,都是拷贝文件内容,但是他还有另外一个作用就是可以防止重复拷贝。NSObjecRuntime.h是包含在Foundation框架中的文件,因为在每个框架中都有自己的主头文件(主头文件的名称和文件名相同),因此可以通过利用包含主头文件来声明Foundation框架中的其他头文件,这样也减少了代码量。例如Foundation框架的主头文件名为Foundation.h。所以,在以后写代码是可以利用#import
<Foundation/Foundation.h>来声明头文件。

二、面向对象(Object Oriented,OO)

面向对象的设计(OOD,Object Oriented Design)是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成“现实世界”的对象。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。

OC是面向对象,C是面向过程,是两种不同的思想。面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类。

术语:OO:面向对象 OOP:面向对象编程

三、类

类就像对象的图纸,可以通过类进行对象的具体设计。图纸中含有许多属性,是无数个对象相同属相的集合。所以说OC的开发要先有类,有了类才能创建出许多对象。

在编程过程中,一般出现名词时都可以看成是类,拥有相同属性和行为的对象都可以抽象为一个类。类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识。在对方法进行类的划分中,一般采取的做法是谁最熟悉这个方法那么就把这个方法划分给谁。在OC中,对象对方法的调用称为消息机制,即向既定的对象发送了什么消息。

1、如何创建类?

步骤:(1)类名称;(2)属性;(3)行为(功能)。

//类的声明;
@interface  JiSuan: NSObject
{
@public //可以让外部指针间接访问对象内部的变量
int a;
}
//类方法以“+”开头;对象方法以“-”开头。
+ (int)sumWithNo1:(int) a andNo2: (int) b;

+ (int)minusWithNo1:(int) a andNo2: (int) b;

@end

//类的实现;
@implementation JiSuan

+ (int)sumWithNo1:(int) a andNo2: (int) b
{
return a+b;
}

+ (int)minusWithNo1:(int) a andNo2: (int) b
{
return a-b;
}

@end
2、类的内存分析

类也占据了存储空间。在第一次调用类时,就将类加载到了内存,里边只存放了方法列表。在每一个对象中都有一个isa指针,用来指向它的类。对象公用类的所有成员变量,而类中的方法在内存中仅有一次,对象也是拥有类所拥有的方法。对象要实现一个方法,可以通过[]来实现,形式为[对象名称 方法]。

3、常见错误

(1)@end不要漏掉;

(2)interface中不允许初始化,而且每个成员变量默认的初始值为0;

(3)不能随便将成员变量当做c语言中的变量来使用;

(4)类的声明必须在应用之前,类的实现可放在最后。

4、对象方法和函数的区别

(1)对象方法开头都是以“-”开始;

(2)方法的声明必须在@interface和@end之间,而实现必须在@implementation和@end之间。

(3)对象方法只能由对象调用;

(4)函数是可以写在任何地方的,包括@implementation和@end之间;

(5)函数属于整个文件,对象方法归类和对象所有;

(6)函数内部不能直接通过成员变量名访问对象的成员变量。

5、类的具体实例:

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Student.h"

int main()
{
Student *stu = [[Student alloc] init];  //创建一个学生对象
stu->_sex = sexMan; //设置学生性别为sexMan
stu->_birthday.year = 2011; //设置学生的生日
stu->_birthday.month = 10;
stu->_birthday.day = 13;

Dog *dog = [Dog new]; //创建一个狗对象
stu->_dog = dog; //将狗对象给人
stu->_dog->_weight = 12; //设置stu的狗的体重

[stu liuDog]; //stu遛狗,狗的体重减一
NSLog(@"stu的狗的体重为:%d", stu->_dog->_weight); //输出11
[stu weiDog]; //stu喂狗,狗的体重加一
NSLog(@"stu的狗的体重为:%d", stu->_dog->_weight); //输出为12

return 0;
}

<span style="font-family:宋体;">Student.h文件:</span>
#import <Foundation/Foundation.h>
#import "Dog.h"

typedef enum sex
{
sexMan,
sexWoman
} Sex;

typedef struct day
{
int year;
int month;
int day;
} Day;

typedef enum color
{
black,
red,
white
} Color;

@interface Student : NSObject
{
@public
Sex _sex;
Day _birthday;
double _weight;
Color _favColor;
Dog *_dog;
}

- (void)liuDog;
- (void)weiDog;

@end

<span style="font-family:宋体;">Student.m文件:</span>
#import "Student.h"

@implementation Student

- (void)liuDog
{
NSLog(@"遛狗");
[_dog run];
}

- (void)weiDog
{
NSLog(@"喂狗");
[_dog eat];
}

@end

<span style="font-family:宋体;">Dog.h文件:</span>
#import <Foundation/Foundation.h>

@interface Dog : NSObject
{
@public
int _weight;
}

- (void)eat;
- (void)run;

@end

<span style="font-family:宋体;">Dog.m文件:</span>
#import "Dog.h"

@implementation Dog

- (void)eat
{
_weight += 1;
}

- (void)run
{
_weight -= 1;
}

@end


------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: