objective-c中类的申明、实现、访问
浏览数:10090 

用代码讲解如何创建类,类的声明/类的实现

一.类的申明

//定义一个枚举值

enum Color

{

 black,

 white

};

typedef enum Color IColor;


//声明类 用@inteface

@interface Cat:NSObject //NSObject 是根类,有一些基本方法,比如创建对象的方法

{

 //定义属性

 /*

  注意:

  1.属性一般用“_”开头

  2.必须定义在大括号中

  3.注意变量的作用域

  */

 @public

 int _age;

 IColor _color;

}


//定义行为必须写在@interface 和@end 之间,并且不能写在大括号之内

/*

声明函数步骤

OC方法分为 类方法(+) 和 对象方法(-)


1.定义函数结构

2.是否有参数

3.是否有返回值


注意

1.声明类的行为必须在@interface 和@end 之间,并且不能写在大括号中

2.oc 方法中所有的数据类型都需要用括号括起来

3.如果没有形参用";"结束不用括号,应为 括号用于数据类型

4.如果是类方法用 + ,对象方(需要用实例来调用)法用 -

5.方法名命名规则 驼峰命名法

6.OC 方法中,每个参数对应一个冒号

7.冒号也是方法名的一部分

8.多个惨可以在冒号前加上标签,说明参数的作用,“说明”也是方法的一部分

*/


//无参数 无返回值

-(void) walk;


//无参数 有返回值

-(int) getAge;


//有参数 有返回值

-(int) eat:(char *) food;


//多个参数 主要空格

-(void) eatFood:(char *) food andDrink:(char *) water;

@end//声明结束


二.类的实现

/*

@implementation 表示实现一个类

@end 表示类实现结束

@implementation 只有一个作用,就是实现@interface中声明的方法

*/


@implementation Cat

 /*

 实现方法

 1.@implementation要显示 @interface 中声明的方法,名称一样,只需要在后面加上大括号

 2.在括号中实现功能  

 */


 //无参数 无返回值

 -(int) walk

 {

     NSLog(@"cat walk");

 }


 //无参数 有返回值

 -(int) getAge;

 {

     //在OC对象中,直接通过名字访问成员变量

     return _age;

 }



 //有参数 无返回值

 -(char *) eat:(char *) food

 {

     NSLog(@"%s",food);

     return "ok";

 }


 //多个参数

 -(void) eatFood:(char *) food andDrink:(char *) water

 {

     NSLog("Food:%s Water:%s",food ,water);

 }


@end


三 访问部分

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

{


 //创建对象

 /*

  说明:

  1.要创建对象,需要类继承NSObject类

  2.要访问实例变量,需要把变量声明为@public 类型


  创建对象前,首先在堆中创建类对象(存储对象方法 )

  实例化对象 [Obj new]  [Cat new]时会做三件事:

  1.在堆中开辟新的存储空间(有别于类对象的空间,是堆中的空间,new 一个 则开辟一个)

  2.初始化成员变量(成员变量 在堆 中),给成员变量赋默认值,lsa(指针 指向 对象)

  3.返回地址 指向堆地址的指针


  Cat *cat 用于接收返回地址的指针,是个局部变量

  局部变量会再栈中开辟空间,保存指向堆中指针


  */



 Cat *cat = [Cat new];


 //访问属性 和C中指针访问方式一样

 cat->_age=4;

 cat->_color=white;

 int age = cat->_age;

 NSLog("age=%d",age);



 //调用方法 用 "[]"

 /*

 调用方法 调用方法在oc 中有称为发送消息


 1.cat对象(栈中)在堆中找到las指针

 2.las指针 找对 对应 类对象的方法

 3.如果方法中有成员变量(类对象中不保持成员变量),方法会根据调用指针定位对应的对象的成员变量(堆中)

 */


 //无参数 无返回值

 [cat  walk];



 //无参数 有返回值

 int age = [cat getAge];

 NSLog(@"%d",age);



 //有参数 无返回值

 [cat eat:"mouse"];



 //多个参数

 [cat eatFood:"mouse" andDrink:"农夫山泉"];    


 return 0;


}


联系管理员
 
 
 
 
 工作时间
周一至周五 :9:30-17:30
马上建站
会员登录
登录
我的资料
留言
回到顶部