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

来源:互联网 发布:mac android ant 编辑:程序博客网 时间:2024/06/05 18:36

------- 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);}@endint 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;}@endint 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);}@endint 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) 类的成员变量在声明时不能初始化。

0 0
原创粉丝点击