黑马程序员——Objective-C语言知识整理——类方法与对象方法

------- android培训java培训、期待与您交流! ----------

1、对象与方法的关系

对象也可以像变量、数组和指针一样,作为方法的实参或返回值,用于在相关数据进行操作处理。

1.1 对象作为方法的参数

创建Person类,实现功能:对象作为方法的参数,显示参数Person类的姓名、性别。

对象作为方法的参数示例代码:

#import <Foundation/Foundation.h>

typedef enum{kSexman,kSexwoman} Sex;//定义Sex枚举类型

//定义Person类

#pragma mark Person类

@interface Person : NSObject

{

     @public

     NSString *_name;

     Sex _sex;

}

- (void)disPerson:(Person *) p;

@end

//Person类的实现

@implementation Person

- (void)disPerson:(Person *) p

{

     NSLog(@"姓名: %@,性别:%d ",p->_name,p->_sex);

}

@end

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

     @autoreleasepool{

           //创建p与p1对象

           Person *p = [Person new];      

           Person *p1 = [Person new];

            //初始化p1

           p1->_name = @"张三";

           p1->_sex = kSexman;


           [p disPerson p1];//对象方法调用

     }

    return 0;

}

1.2 对象作为方法的返回值

创建Person类,实现功能:对象作为方法的返回值,修改返回值Person类为参数Person类的姓名。

对象作为方法的返回值示例代码:

#import <Foundation/Foundation.h>

typedef enum{kSexman,kSexwoman} Sex;//定义Sex枚举类型


//定义Person类

#pragma mark Person类

@interface Person : NSObject

{

     @public

     NSString *_name;

     Sex _sex;

}

- (Person *)ChangeName:(Person *) p;

@end


//Person类的实现

@implementation Person

- (Person *)ChangeName:(Person *) p

{

     Person *person = [Person new];

     person->_name = p->_name;

     return person;

}

@end


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

     @autoreleasepool{

           //创建p与p1对象

           Person *p = [Person new];      

           Person *p1 = [Person new];


            //初始化p1

           p1->_name = @"张三";

           p1->_sex = kSexman;


           [p ChangeName p1];//对象方法调用

           NSLog(@"p 的姓名为: %@",p->_name);

     }

    return 0;
}

1.3 对象作为方法的参数连续传递

创建Gun、Person类,实现功能:人开枪,枪发射子弹。

对象作为方法的参数连续传递代码示例:

#import <Foundation/Foundation.h>

typedef enum{kSexman,kSexwoman} Sex;//定义Sex枚举类型

//定义Person类
#pragma mark Person类

@interface Person : NSObject

{
     @public
     NSString *_name;//姓名
     int _life;//血量
}
+ (void)Run;//奔跑
- (void)Shoot:(Gun *) gun;//射击
@end


//Person类的实现
@implementation Person

+ (void)Run//奔跑
{
   NSLog(@"可劲跑呢");
}
- (void)Shoot:(Gun *) gun//射击
{
    [gun Fire];
}

@end
 

//定义Gun类
#pragma mark 枪类Gun

@interface Gun : NSObject

{
     @public

     NSString *_size;//型号

     int _bullet;//子弹数

}
- (void)Fire;//射击

@end//Gun类的实现@implementation Gun

- (void)Fire//射击
{
  NSLog(@"突突突……,剩余子弹%d",gun->_bullet);
}

@end
int main(int argc,const char * argc[]){
    @autoreleasepool{ 
       //创建p与p1对象 
       Person *p = [Person new]; 
       Gun *gun = [Gun new]; 
       //初始化p
       p->_name = @"张三"; 
       p->_life = 100;
       //初始化gun
       gun->bullet = 10;
       gun->size = @"国产87式5.8MM步枪弹"; 
       [p Shoot gun];//对象方法调用 
   } 
   return 0;
}

2、类方法的使用

使用类方法可以

(1) 由于使用类方法不需要创建对象,不用分配内存堆空间,可以减少内存空间的分配。

(2) 减少内存访问与查找时间,提高代码执行效率。

(3) 作为工具方法,例如统计字符串的长度等。

3、函数与对象方法的区别

函数的定义,如:void run();

函数的实现,如:void run(){ //函数具体功能实现代码 }

函数的使用说明:

(1) 函数执行是平行的,没有使用优先级。

(2) 函数没有隶属关系,而对象方法的使用遵循类的隶属关系。

(3) 函数不可以使用类的成员变量。

(4) 函数属于整个文件,可以将实现部分代码置于除@interface...@end外任何位置,可以在main函数内外声明、调用。

对象方法的定义,如:-(void)run;

对象方法的实现,如:-(void)run{ //函数功能实现代码 }

对象方法的使用说明:

(1) 对象方法的声明只能放在@interface...@end之间,对象方法的实现只能放在@implementation...@end之间。

(2) 类方法使用方法类型标识符为‘+’,对象方法的为‘-’。

(3) 对象方法只能由实例化的对象调用,不能像函数那样调用。

(4) 对象方法归类和对象所有,非相同类的对象不能使用该类方法。

如下图所示,Person类的对象person只能调用自己的对象方法,而不能使用Dog类的对象方法,这是因为,使用person对象时,没有Dog类对象方法的代码区地址。


4、使用注意

(1) 类方法不可以调用本类的相同方法,以免引起死循环。

(2) 不访问成员变量,一般使用类方法,减少内存分配。

(3) 方法不能在类声明的“{}”部分。

(4) 方法的声明与实现不能嵌套使用。

(5) 类的成员变量在声明时不能初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值