类别、类拓展

一、类别(运行时完成添加)

.h文件
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSObject (Person)
@property (nonatomic, copy) NSString *name;
@end

NS_ASSUME_NONNULL_END
.m文件
#import "NSObject+Person.h"
#import <objc/runtime.h>
static NSString *nameKey = @"nameKey"; // name的key
@implementation NSObject (Person)
/**
 setter方法 getter方法
 */
- (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY);
}
- (NSString *)name {
    return objc_getAssociatedObject(self, &nameKey);
}
@end
其他地方调用
- (void)viewDidLoad {
    [super viewDidLoad];

    NSObject *objc = [[NSObject alloc] init];
    objc.name = @"wangwang";
    NSLog(@"%@", objc.name);
    
    // Do any additional setup after loading the view.
}

二、类拓展(编译时完成添加)

.h文件不做任何修改,只在.m文件修改,添加需要拓展的私有方法、成员变量,属性
#import "Person.h"

@interface Person(){
    NSString *_age;
}
-(void)getUserInfo;
@end

@implementation Person
-(void)getUserInfo{
    NSLog(@"====getuserinfo");
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容