Objective-C 之Extension

Objective-C 之Extension

class extension:类扩展

类扩展与 category 有相似性,但在编译时它只能被添加到已有源代码的一类中(该类扩展和该类同时被编译)。

  • 在extension里面只能写定义,不能写实现。
  • 通过扩展可以控制默写函数是否堆外界可见。
  • 扩展还可以定义属性(@property)
示例程序:

Student.h

#import <Foundation/Foundation.h>

typedef enum : NSUInteger {
    Female,
    Male,
} Gender;

@interface Student : NSObject

-(void)sayHello;

@property (readonly) Gender gender;

@end

Student.m


#import "Student.h"
#import "Student_Ext.h"
@implementation Student
-(void)sayHello{
    NSLog(@"Student say hello");
    self.gender = Female;
}
-(void)sayHi{
    NSLog(@"Student say Hi");
}
@end

Student_SayHi.h

#import "Student.h"

@interface Student ()
-(void)sayHi;
@property (readwrite)Gender gender;

@end

main.m

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Student_Ext.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *s =[[Student alloc] init];
        [s sayHello];
        [s sayHi];
    }
    return 0;
}

category和extension

category是用来扩展累的功能的,而extension仅仅扩展定义,没有源代码的话是不能使用扩展的。

参考资料:
自定义现有的类 - Customizing Existing Classes

类扩展(class extension)

posted @   brave-sailor  阅读(339)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2015-04-30 Activity切换动画(overridePendingTransition)-翻页效果
2015-04-30 Android 类似未读短信图标显示数字效果的分析
点击右上角即可分享
微信分享提示