self.XXX与_XXX的区别
- 通过self.XXX得到的数据相当于调用get函数取值,等价于[self XXX];而通过_XXX获取的是自己的实例变量,直接对变量进行操作,并未调用get函数。所以,通过懒加载方式初始化的变量只能通过self.XXX调用,否则可能会存在未初始化的问题。
- self.xxx是对属性的访问;而_xxx是对局部变量的访问。在使用self.xxx时是调用一个getter方法。会使引用计数加一,而_xxx不会使用引用技术加一的。
- 所以,使用self.XXX是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下滑线的时候忽略了self这个指针,后者容易在block中造成循环引用。同时,使用 _XXX是获取不到父类的属性,因为它只是对局部变量的访问。
颜色处理:
- RGB:
UI给的色彩无法直接获取的时候,可以通过mac自带的系统工具——数码测色计,获取对应的RGB颜色。
[UIColor colorWithRed:242/255.0 green:242/255.0 blue:242/255.0 alpha:1 ];
- 十六进制颜色:
若颜色是写死的,可以在网上找一个十六进制和RGB颜色转换器把十六进制转换成RGB颜色;另外,可以写一个Category直接用十六进制字符串定义颜色:
UIColor+Hex.h:
#import <UIKit/UIKit.h>@interface UIColor (Hex)+ (UIColor*)colorWithHex:(NSString *)hexString alpha:(CGFloat)alphaValue;+ (UIColor*)colorWithHex:(NSString *)hexString;+ (NSString *)hexFromUIColor: (UIColor*)color;@end
UIColor+Hex.m:
#import "UIColor+Hex.h"@implementation UIColor (Hex)+ (UIColor*)colorWithHex:(NSString *)hexString alpha:(CGFloat)alphaValue
{NSString *tmpHexString = [[hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];if ([tmpHexString hasPrefix:@"#"]) {tmpHexString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@"0x"];}else if (![tmpHexString hasPrefix:@"0x"]){tmpHexString = [NSString stringWithFormat:@"0x%@", tmpHexString];}if (tmpHexString.length != 8) {return [UIColor clearColor];}long colorLong = strtoul([tmpHexString cStringUsingEncoding:NSUTF8StringEncoding], 0, 16);return [UIColor colorWithRed:((float)((colorLong & 0xFF0000) >> 16))/255.0green:((float)((colorLong & 0xFF00) >> 8))/255.0blue:((float)(colorLong & 0xFF))/255.0 alpha:alphaValue];
}+ (UIColor*)colorWithHex:(NSString *)hexString
{return [UIColor colorWithHex:hexString alpha:1.0];
}+ (NSString *)hexFromUIColor: (UIColor*) color {if (CGColorGetNumberOfComponents(color.CGColor) < 4) {const CGFloat *components = CGColorGetComponents(color.CGColor);color = [UIColor colorWithRed:components[0]green:components[0]blue:components[0]alpha:components[1]];}if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {return [NSString stringWithFormat:@"#FFFFFF"];}return [NSString stringWithFormat:@"#%X%X%X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0),(int)((CGColorGetComponents(color.CGColor))[1]*255.0),(int)((CGColorGetComponents(color.CGColor))[2]*255.0)];
}@end
然后通过[UIColor colorWithHex:_sectionColorArray[section]]直接定义颜色。