细节总结(一)
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.0
green:((float)((colorLong & 0xFF00) >> 8))/255.0
blue:((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]]直接定义颜色。