iOS 6 以后 LLVM 引入自动有合成属性功能,所以基本上比较少使用了. 一般在.m文件 @implementation 下面进行声明.
@synthesize 作用:
- 生成下划线的成员变量
- 生成get set方法(若是只读属性,只能生成get方法)
- 可以自定义合成的实例变量(这时候可以重写属性的get/set方法)
只读属性使用@synthesize后重写get后,自动合成的实例变量_name失效
分类中实现属性 => 一般用关联对象.
.h文件
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIView (test)
/// 名字
@property (nonatomic, copy) NSString *name;
@end
.m文件
#import "UIView+test.h"
#import <objc/runtime.h>
@implementation UIView (test)
- (void)setName:(NSString *)name {
objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (NSString *)name {
return objc_getAssociatedObject(self, @selector(name));
}
@end
结束了,下篇见!
网友评论