iOS 中分類如果聲明一個strong屬性變量,那很簡單,在.m文件中直接實現關聯對象的兩個setter getter方法,但如果無其他選擇,必須在分類中聲明一個weak屬性變量,如一個 weak delegatge ,那么就不能用設置關聯對象的兩個方法直接弄,因為設置方法如果是 RETAIN 的話會造成內存泄漏,又不能是ASSIGN。
一個簡單有效的方法是在分類中再 @interface 一個類,把這個weak屬性放到這個新建的類當中,然后再在分類中聲明一個 strong 該新建類對象,之后再.m文件的實現直接用關聯對象的兩個方法創建這個strong對象即可。記得用RETAIN。
全過程如下:
.h文件聲明
//協議
@protocol FeedBackDelegate <NSObject>
- (void)FeedBack;
@end
//新建一個類
@interface FeedBackModel : NSObject
//在這個新建類里聲明 weak delegate
@property (nonatomic, weak) id<FeedBackDelegate> feedBackDelegate;
@end
@interface LayerModel (GGG)
//聲明一個該類的strong屬性
@property (nonatomic, strong) FeedBackModel *FeedBackModel;
@end
.m文件實現
@implementation FeedBackModel
//空實現
@end
//分類實現
@implementation LayerModel (GGG)
- (void)setFeedBackModel:(FeedBackModel *)FeedBackModel {
objc_setAssociatedObject(self, @selector(FeedBackModel), FeedBackModel, OBJC_ASSOCIATION_RETAIN);
}
- (FeedBackModel *)FeedBackModel {
return objc_getAssociatedObject(self, @selector(FeedBackModel));
}
@end