【发布时间】:2020-03-29 02:02:54
【问题描述】:
我的代码是
//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]这样的方法时,self.view.backgroundColor的colorName是存在的。(color1和self.view.backgroundColor的地址相同)
但是当我使用[UIColor colorWithRed:green:blue:alpha:]这样的方法时,self.view.backgroundColor的colorName为空。(color2和self.view.backgroundColor的地址不同)
也许问题是关于 OC 的深拷贝,因为 self.view.backgroundColor 的属性是(可空的,非原子的,复制)。如何赋予 self.view.backgroundColor.colorName 价值并使用 [UIColor colorWithRed:green:blue:alpha:] 之类的方法。
谁能帮帮我,我将不胜感激! 谢谢!
【问题讨论】:
-
你不应该说
&kColorName吗?
标签: objective-c categories uicolor