Мой код:
// UIColor + Theme.h
@interface UIColor (Theme)
@property (nonatomic, copy) NSString *colorName;
@end
// UIColor + Theme.m
static const void *kColorName = "colorName";
@implementation UIColor (Theme)
- (NSString *)colorName {
return objc_getAssociatedObject(self, kColorName);
}
- (void)setColorName:(NSString *)colorName {
objc_setAssociatedObject(self, kColorName, colorName, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end
// код в viewController. m
NSLog(@"%@", self.view.backgroundColor.colorName);//**print (null)**
UIColor *color1 = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1];
color1.colorName = @"C1";
NSLog(@"%@", color1.colorName);//**print C1**
self.view.backgroundColor = color1;
NSLog(@"%@", self.view.backgroundColor.colorName);//**print (null)**
self.view.backgroundColor.colorName = @"C1";
NSLog(@"%@", self.view.backgroundColor.colorName);//**print (null)**
UIColor *color2 = [UIColor whiteColor];
color2.colorName = @"C2"
self.view.backgroundColor = color2;
NSLog(@%@", color2.colorName);// **print C2**
NSLog(@"%@", self.view.backgroundColor.colorName);// **print C2**
Когда я использую метод, подобный [UIColor whiteColor], colorName для self.view.backgroundColor существует (адрес color1 и self.view.backgroundColor одинаков)
Но когда я использую такой метод, как [UIColor colorWithRed: green: blue: alpha:], colorName для self.view.backgroundColor будет пустым (адрес color2 и self.view.backgroundColor различаются)
Возможно, проблема в глубоком копировании O C, потому что свойство self.view.backgroundColor имеет значение (nullable, nonatomi c, copy). Как я могу дать значение self.view.backgroundColor.colorName и использовать такой метод, как [UIColor colorWithRed: green: blue: alpha:].
Может кто-нибудь мне помочь, я буду весьма признателен! Спасибо!