iOS开发之oc(回顾笔记)--类与对象(1)

理论是枯燥的,所以有点长。哈哈哈~

要学习一门语言,我们首先得了解它,那么

【什么是OC】

objectiv-c  简称 OC,是一门基于C语言为基础编写而成的面向对象的语言。完全兼容C语言;可以在OC代码中混入C语言代码,甚至是C++代码;

可以使用OC开发Mac OS X平台和iOS平台的应用程序。

(一)首先,先了解一下面向过程面向对象

【面向过程】

1面向过程的语言所有语句都是祈使句 

2面向过程的语言是数学逻辑的映射

3面向过程语言的程序 = 数据 + 算法

C语言就是一门面向过程的语言,解决问题关注的是过程

【面向对象】

1对象作为接受消息的单位,不同的对象负责接收和处理数据的某个方面,不同对象协同完成功能

2是生活逻辑的映射

3程序 =  对象 + 消息

而oc就是面向对象的语言,解决问题关注的是对象

至于【哪种方法更好】---具体情况具体分析

提示:

>面向对象语言开发的步骤

1.根据需求设计类

2.利用类创建需要的对象

一个OC程序编写-->运行

>

/*方法一

1.编写OC程序:.m源文件(在终端touch xxx.m  创建OC程序)

2.编译.m文件为.o目标文件:cc -c xxxx.m

3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation

4.执行a.out文件:./a.out

 

 一步到位:

 cc xxxx.m -framework Foundation

 方法二:当然你也可以用Xcode(嘿嘿,就不那么苦逼了)

*/

 

(二)类与对象的初识

1.认识

类:具有对象的属性,是对对象的描述。

对象:类的实例化,看得见摸得着

武功的最高境界叫做“万物皆对象”。

2.

【从封装的角度】

【结构体】是对数据结构的封装

【函数】对处理数据的算法的封装

 【类】    是对要处理的数据结构进行封装      同时对处理数据的算法做了封装                            

 类 = 结构体 + 函数

从编程语言的角度分析

【类】它是一个自定义的类型             没有占用内存

【对象】某个类创建出来的变量         用类型定义的变量会占用内存

3.解决OC问题的步骤(核心思想

第一:找到题目中所需要的对象

第二:列出对象的成员变量和成员方法

第三:根据找到的对象,创建相应的类

第四:用类创建出来对象

第五:给对象发消息,让对象完成相应的功能

4.设计一个类的3个步骤:

1).类名

2).属性

3).行为(动作\功能)

(三)类和对象---实战

  =   属性数据封装(成员变量)    +  方法(函数)封装

1、【头文件的引用】

#import <Foundation/Foundation.h>

#import "Cube.h"

<>表示导入系统的头文件

“”表示导入自定义的头文件

提示:#import作用#include一致,而且可以防止头文件的内容被包含多次

// 包含Foundation框架里面的NSObjCRuntime.h

// 应该包含Foundation框架的主头文件Foundation.h

 

2、类声明和实现

2.1、【类的声明】

代码示例

@interface       Dog   :   NSObject
{
//属性数据封装在{ }以内     // 成员变量类型  成员变量名称;
    
    int   _age;    //属性成员名加_(成员变量
    float _weight;
}

//封装方法

//最常用的方法 setter(设置)/getter(获取)

//c函数语法:返回值类型  函数名(参数列表)
//OC方法语法:
// 方法类型
//-  对象的方法
//+  类的方法

//方法类型 (返回值类型)部分方法名:(参数类型)参数名称1 部分变量名:(参数类型)参数名称2;  // 多个参数

//setter / getter 方法主要是为了保护对象的数据安全

//成员变量的setter方法

-(void)setAge:(int)newage;   //void setAge(int age)

-(void)setWeight:(float)w;

//成员变量的getter方法

-(int)age;        //  对 -(int)getAge进行了优化,方法名与成员变量相对应

-(float)weight;

//功能方法
-(void)run;
-(void)bark;

@end

代码说明

a.

首行代码

@interface 类名 : 父类名

1用关键字@interface 声明一个类

2interface 后面跟的是类名

3冒号表示继承关系,后面跟的是父类

比如说你创建可Dog类

: NSObject --让Dog这个类具备创建对象的能力)

b.

【成员变量】

成员变量(实例变量)声明在大括号之间,成员变量是在描述对象有什么.

c.

【成员方法】

1)无参 ,无返回值的成员方法

-(void)方法名;

2)带参数

-(void)方法名:(参数类型)形参;

3)带多个参数的方法

-(void)标签1:(参数1的类型)形参  and标签2:(参数2的类型)形参;

4)带返回值得方法

-(返回值类型)方法名;

【成员函数是描述对象可以做什么】

 

3、【类的实现】---也可以说是方法的实现

 @implementation Dog
//实现类方法关键字  类名
//  在这里进行方法的实现 (也就是写具体代码)

// set方法的实现
 -(void)setAge:(int)newage
{
     _age = newage;
 }

 // get方法的实现
 -(int)age
{
    return _age;
 }
 
 //功能方法
 -(void)run
 {
     NSLog(@"run.....");
 }
 
 @end

 

 

4、【对象的创建和使用】

1)创建对象

类名 *指针变量名 =[类名  alloc/new];

利用类的alloc/new方法创建一个新的对象(会在堆空间声明一块空间),并且把对象的地址返回左边的指针变量

 (所以需要用该类类型的指针变量去接收

Dog * dog = [Dog alloc];

2)使用对象

1> 访问成员变量

指针变量名->成员变量名 = 具体数值;

c->speed = 100;(前提是在成员变量前写@public)

2> 让对象执行方法

[指针变量名 方法名];

[c run];

[指针变量名 部分方法名:实参1  部分方法名:实参2];

[c sumOfNum1:100 andNum2:200];

// 消息机制:给指针变量所指向的对象发送一条消息(消息名称就是方法名),让那个对象执行相应的方法(动态)

 

int main()
{
    //  通过定义类指针变量引用实际对象       
    //  类实例化对象 alloc,在堆上申请空间
      
      Dog * wangcai  =  [Dog alloc];
      [wangcai setAge:5];     //  调用set方法设置属性
      [wangcai setWeight:50];
       int a = [wangcai age];  // 调用get方法取得值
       float w = [wangcai weight];

    //  给对象发消息[对象 方法]、或【对象 消息】
    //  给指针变量wangcai指向的对象发送一条run消息
    //  接收消息的那个对象,称为“消息接收者”
          
        [wangcai run];
        [wangcai bark];
        
        NSLog(@"a = %d w = %f",a,w);  
    return 0;
}
   

 

5、【方法的调用】

无参无返回值格式:  [对象/类名   消息/方法/函数名]

无返回值 有参数:     [对象/类名   消息/方法/函数名:参数]

有返回值的方法调用  返回值类型的变量 =  [对象/类名   消息/方法/函数名]

/*

 OC对象方法和函数的区别

 1.函数属于整个文件,在文件的任意地方都能调用;对象方法只属于对象,只有对象才能调用对象方法

 2.对象方法只能声明在@interface和@end之间,对象方法只能实现在@implementation和@end之间.

   函数的声明和定义可以写在任意地方,函数不能归某个类所有,只属于某个文件

 */

补充:

对象在内存中的存储情况

1.每一个对象都有自己的成员变量,每个对象的成员变量之间是独立,互不影响

2.每一个对象内部都有方法列表,方法的代码都的一样的

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。