蓝懿 ios技术交流和心得分享 2016年01月22日

苹果从iOS5开始提供了一个比较强大的工具UIAppearance,我们可以通过UIAppearance设置一些UI的全局效果,这样就可以很方便的实现UI的自定义效果又能最简单的实现统一界面风格。

方法介绍

  1. + (id)appearance
  • 这个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:
[[UINavigationBar appearance] setTintColor:myColor];
  1. + (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...
  • 这个方法可设置某个类的改变:例如:设置UIBarButtonItem 在UINavigationBar、UIPopoverController、UITabbar中的效果。就可以这样写
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class],[UITabbar class] nil] setTintColor:myPopoverNavBarColor];

使用注意

  • iOS8以后又添加了一些方法,这里就不做介绍了,我们开发中最长用到的还是第1种方法

  • 我们在查看方法或者属性的时候,若是看到方法或属性的后面是UI_APPEARANCE_SELECTOR的,我们就可以通过appearance统一设置相关的属性

  • 注意 : 使用appearance设置UI效果最好采用全局的设置,在所有界面初始化前开始设置,否则可能失效。

代码示例

统一设置TabBarItem的文字属性


- (void)setUpTabBarItemAttrs{
    UITabBarItem *item = [UITabBarItem appearance];

    NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
    normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:15];
    normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    [item setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];

    NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
    selectedAttrs[NSForegroundColorAttributeName] = [UIColor blackColor];
    [item setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];


}

单例(singleton)

May 15, 2014

什么是单例模式

  • 单例模式 是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在iOS开发中,单例模式是非常有用的一种设计模式。

  • 可以保证在程序运行过程,一个类只有一个实例

实现单例模式的条件

  • 实现单例模式有三个条件:

  1. 类的构造方法是私有的
  • 类提供一个类方法用于产生对象
  • 类中有一个私有的自己对象
  • 针对于这三个条件,OC中都是可以做到的

  1. 类的构造方法是私有的 我们只需要重写allocWithZone方法,让初始化操作只执行一次
  • 类提供一个类方法产生对象 这个可以直接定义一个类方法
  • 类中有一个私有的自己对象 我们可以在.m文件中定义一个属性即可

应用场景及注意点

  • 应用场景

  • 某个类经常被使用(节约系统资源)
  • 定义工具类
  • 共享数据
  • 注意点

  • 不要继承单例类
    • 先创建子类永远是子类对象
  • 先创建父类永远是父类对象
  • 单例模式:

  • 懒汉模式
 : 第一次用到单例对象的时候再创建
  • 饿汉模式
 : 一进入程序就创建一个单例对象

ARC

懒汉模式

#import "Singleton.h"
@implementation

 Singletonstatic id _instance;+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    if (_instance == nil) { // 防止频繁加锁
        @synchronized(self) {
            if (_instance == nil) { // 防止创建多次
                _instance = [super allocWithZone:zone];
            }
        }
    }
    return _instance;}+ (instancetype)sharedSingleton{
    if (_instance == nil) { // 防止频繁加锁
        @synchronized(self) {
            if (_instance == nil) { // 防止创建多次
                _instance = [[self alloc] init];
            }
        }
    }
    return _instance;}- (id)copyWithZone:(NSZone *)zone{
    return _instance;}@end

饿汉模式(不常用)

#import "HMSingleton.h"
@implementation

 Singletonstatic id _instance;+ (void)load{
    _instance = [[self alloc] init];}+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    if (_instance == nil) { // 防止创建多次
        _instance = [super allocWithZone:zone];
    }
    return _instance;}+ (instancetype)sharedSingleton{
    return _instance;}- (id)copyWithZone:(NSZone *)zone{
    return _instance;}@end

GCD实现单例模式

@implementation
 Singletonstatic id _instance;+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;}+ (instancetype)sharedSingleton{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
    });
    return _instance;}- (id)copyWithZone:(NSZone *)zone{
    return _instance;}@end

非ARC

在非ARC的环境下,需要再加上下面的方法:
  • 重写release方法为空
  • 重写retain方法返回自己
  • 重写retainCount返回1
  • 重写autorelease返回自己
-
 (oneway void)release { }- (id)retain { return self; }- (NSUInteger)retainCount { return 1;}- (id)autorelease { return self;}
  • 如何判断是否是ARC
#if __has_feature(objc_arc)
//ARC环境

#else

//MRC环境

#endif

​
  • 学习ios  重要还是要理清楚思路  在做或者看老师代码的时候 自己多想想为什么  不要自己看着就抄  另外还是要推荐一下 蓝懿IOS这个培训机构  和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!
 
  •                                                                   写博客第一百零四天;

                                                                                      QQ:565803433

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值