Objective-c - 延展:extension

本文介绍了 Objective-C 中 Extension 的概念及其应用场景。Extension 是一种特殊的分类,用于私有化类成员,包括私有属性和方法。文章通过示例代码详细解释了如何在 Extension 中声明私有属性和方法,并说明了其实现机制。

/*

 

 Objective-c - 延展:extension

 

    1> 延展:extension是一个特殊的分类,故而延展和分类一样也是类的一部分.

        

 

    2> 延展的特殊性:

 

        1,延展没有名称是一个匿名的分类;

        2,延展只有声明没有实现,和本类共享一个实现

 

 

    3> 延展的声明:   

 

        @interface 本类名 ()

 

        @end

 

        延展没有单独的实现,和本类共享同一个实现,将方法的声明写在延展中,将方法的实现写在本类的实现中.

        延展只有一个.h文件,没有.m文件.

 

 

    4> 延展使用的注意

 

        在分类当中只能新增方法,不可以新增属性,@property只能生成setter/getter方法的声明而没有实现也不会生成带下划线的私有属性.

 

        在延展中可以增加属性,也可以写@property,会自动生成带下划线的私有属性,生成setter/getter方法的声明和实现.

 

        在延展中新增方法,而方法的实现是要写在本类的实现中的,延展和本类共享同一个实现.

 

 

 Objective-c - 延展的使用场景

 

    1> 延展和本类共享同一个实现,其作用肯定不是把一个类分为多个模块,也不是用来扩展一个类,因为新增一个方法,方法的实现还要写在本类的实现中.

 

 

    2> 延展的作用:

 

        延展是用来私有化类的成员的,如果类中有成员需要被私有化:

 

             1,在本类的@interface@private

             2,写在本类的@implementation

             3,写在延展中

 

        写在延展中来私有化成员的优点:可以清晰地断定方法是私有方法.方法需要被私有化:只写实现不写声明.

 

         建议:

         1,私有化方法的时候,将方法的声明写在延展中.

         2,@property需要被私有化,@property写在延展中.

 

 

    3> 延展的使用

 

         如果累中有私有成员,将这些私有成员全部写在延展中.(私有属性,私有方法的声明,私有的@property)

         

         写在延展中的成员,只能在类的内部访问,不能再外部访问.

         

    代码如下:

 

 

 */


#import <Foundation/Foundation.h>



#pragma mark -

#pragma mark #import "YYPerson.h"

//本类的声明

@interface YYPerson : NSObject


@property(nonatomic,strong)NSString *name;

@property(nonatomic,assign)int age;


- (void)sayHi;


@end




#pragma mark -

#pragma mark #import "YYPerson_YYExtension.h"

//延展的声明

@interface YYPerson ()


//在延展中新增@property

@property(nonatomic,assign)float height;

@property(nonatomic,assign)float weight;


- (void)run;


@end


//本类的实现,延展和本类共享同一个实现

@implementation YYPerson


- (void)sayHi

{

    //此处可以使用点语法访问属性weightheight,证明延展中的@property生成了带下划线的属性和setter/getter方法的声明和实现

    NSLog(@"大家好!我叫%@,今年%d岁了,体重%.2fkg,身高%.2f!", _name, _age, self.weight, self.height);

}


- (void)run

{

    NSLog(@"我在跑步!");

}


@end


#pragma mark -

#pragma mark main函数

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


    //创建人对象

    YYPerson *xiaoming = [YYPerson new];

    

    //赋值属性

    xiaoming.name = @"小明";

    xiaoming.age = 18;

    xiaoming.height = 1.8f;

    xiaoming.weight = 58.5f;

    

    //调用方法

    [xiaoming sayHi];

    [xiaoming run];

    

    return 0;

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值