02-OC创建对象

作者: amoLink | 来源:发表于2016-06-10 00:12 被阅读81次

    在面向对象问世之前,人们是使用面向过程来编程的,那时候程序设计被看成是功能系统的集合。那么,面向对象与面向过程的区别是什么呢 ?


    一、面向对象 VS 面向过程

    知乎上有个解释个人认为是很到位的,说:面向过程是一件事“该怎么做”,面向对象是一件事“该谁来做”,然后那个“谁”就是对象。

    面向过程 ( Procedure Oriented )是以事件为核心,关注的是解决问题所需要的步骤,然后分析解决问题的步骤,然后用函数把这些步骤实现,并按顺序调用。

    面向对象 ( Object Oriented ) 则是以对象为核心,关注需要哪些对象、对象需要具备哪些功能,然后创建出解决问题的对象,利用对象调用相应的方法即可。


    二、对象消息

    2.1  消息表达式

    在 Objective-C 中,id类型的变量是可以存放任何数据类型的对象!对象!对象!定义一个 id 类型的 Object 的方法如下所示:

    id object;

    向 object 发送 message 消息的语法如下:

    [object message];

    这就是消息表达式的语法。其中接收者(object)是一个对象,消息(message)告诉它要做什么。

    消息由消息关键字组成,消息关键字的命名规则同变量名的命名规则一样。与函数一样,消息也可以带有参数。没有参数的消息就只有消息名。

    ***消息名:又称为 消息选择器 、 选择器  或 方法。【以后统一称为方法】

    如:[object message];  //其中“message”就是消息名

    当方法中带有参数的时候:

    [object message:123]; //123为传进来的实际参数

    此时方法就是 “message:” ,注意,冒号也是方法名的一部分。

    2.2  对象的生成和初始化

    只声明一个 id 类型的变量时,改变量并不指向任何对象。所以,在使用一个对象之前,应该调用类的构造方法来生成对象。

    对象的生成:[类名 alloc];

    调用对象的 alloc 方法只是给对象分配储存空间,没有对对象进行初始化。初始化对象的方法成为 “初始化方法” 。Objective-C 的初始化方法通常是 init 或以 init 开头的函数。

    对象创建并初始化:[[类名 alloc] init]; 

    我们已经知道怎么给对象分配储存空间和初始化对象了,但我们还缺少类,那怎么去定义类呢?


    三、类的定义

    3.1  怎么设计一个类

    类的设计,只需关心 3 样东西:1)、类名;2)、属性;3)、方法。

    属性是指对对象的形态、构成及状态的描述,即描述对象的一些固有特征。方法是用来描述对象有所具备的功能,即对象能做什么。

    3.2  定义类

    3.2.1 类的接口声明

    定义一个 人(Person) 类,拥有2个属性:年龄和姓名,一个行为:睡觉。

    ***类名的命名规范:类名要有意义、首字母大写、驼峰标识。

    Objective-C中接口(interface)和实现(implementation)是分离的 ,先来了解一下类接口。类的接口部分定义了类的属性的和方法。类的接口声明通常声明为头文件,提供给要调用的类引用。

    接口的定义如下:

    @interface 类名 : 父类名

    {

    //属性的定义

    }

    //方法声明

    @end 

    //Person类的定义

    #import <Foundation/Foundation.h>

    @interface Person :NSObject

    {

        @public

        int age;//年龄

        NSString *name;//姓名

    }

    - (void)sleep;

    @end

    3.2.2 类的实现

    类的实现部分只要完成对在接口(interface)中声明的方法的实现即可。

    类实现的语法:

    @implementation 类名

    //方法的实现(定义)

    @end

    //Person类的实现

    #import" Person.h"

    @implementation Person

    - (void)sleep{

          NSLog(@"人对象在睡觉");

    }

    @end


    四、创建对象

    #import <Foundation/Foundation.h>

    #import"Person.h"

    int main(int argc,const char* argv[]) {

    @autoreleasepool  {

    //创建人对象p

    Person  *p = [ [Person  alloc ]  init ];

    //给p对象的属性赋值

    p->age = 20;

    p->name = @"jack";

    //调用p的sleep方法

    [p  sleep];

    }

    return  0;

    }

    相关文章

      网友评论

        本文标题:02-OC创建对象

        本文链接:https://www.haomeiwen.com/subject/etfsdttx.html