/*
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
{
//此处可以使用点语法访问属性weight和height,证明延展中的@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;
}
本文介绍了 Objective-C 中 Extension 的概念及其应用场景。Extension 是一种特殊的分类,用于私有化类成员,包括私有属性和方法。文章通过示例代码详细解释了如何在 Extension 中声明私有属性和方法,并说明了其实现机制。
5447

被折叠的 条评论
为什么被折叠?



