细节总结(一)

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]]直接定义颜色。

posted @ 2017-02-27 19:34  早上好王木木  阅读(182)  评论(0编辑  收藏  举报