codecamp

1、iOS 单例的规范写法

做iOS 开发这么久,你确定你会使用单例?

1、来看看规范写法:

//
//  NetAPIManager.m
//  GCDTestDemo
//
//  Created by 博爱 on 2016/11/22.
//  Copyright © 2016年 DS-Team. All rights reserved.
//


#import "NetAPIManager.h"


@implementation NetAPIManager




/**
 *  单例对象对外的唯一接口,用到dispatch_once在初始化时执行一次任务,且dispatch_once保证线程安全
 *
 */
+ (instancetype)sharedNetAPIManager
{
    NSAssert(0, @"这是一个单例对象,请使用+(NetAPIManager *)sharedInstance方法");
    /*! 为单例对象创建的静态实例,置为nil,因为对象的唯一性,必须是static类型 */
    static id sharedNetAPIManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedNetAPIManager = [[super allocWithZone:NULL] init];
    });
    return sharedNetAPIManager;
}


/**
 *  重写allocWithZone方法,保证alloc或者init创建的实例不会产生新实例,因为该类覆盖了allocWithZone方法,所以只能通过其父类分配内存,即[super allocWithZone]
 *
 */
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    return [self sharedNetAPIManager];
}


- (id)copy
{
    NSLog(@"这是一个单例对象,copy将不起任何作用");
    return self;
}


+ (id)copyWithZone:(struct _NSZone *)zone
{
    return [self sharedNetAPIManager];
}


- (BOOL)ba_aaaaaaa
{
    return NO;
}


@end

2、个人简介

方式 链接
微博 『博爱1616』
博客 http://boai.github.io
简书 『简书』
简书专题 『简书专题链接』
QQ 137361770
iOS 10技术开发群 479663605

为解决广大小白项目中遇到的各种疑难杂症,博爱新建了QQ群 479663605,希望广大小白和大神能够积极加入!

老司机也欢迎!

3、博爱极力推荐

序号 类库 简介及功能介绍
3.1 『BAButton』 完全实现 UIButton 的自定义的类库。pod 导入:pod 'BAButton', '~> 1.0.1'
3.2 pod安装和使用方法 对pod还是不熟的同学,可以看下我的博客,是最新的pod安装和使用方法,一直更新!
3.3 『BASegmentControl』 新增网易新闻的滑动SegmentControl,基于『HMSegmentedControl』的完美二次封装!
3.4 『BAReminderDemo』 系统提醒和日历提醒,最近做了一个预约功能,有用到系统提醒和日历提醒,就写了这个demo!
3.5 『BALocalNotification』 本地通知最新完美封装,最近整理了下本地通知和极光推送,有很多坑都踩过了,刚刚整理出来的完美封装,肯定适合大部分场合,也可以用此封装写闹钟,也提醒事件,都可以!如果喜欢,请在git上点个星吧!
3.6 『BANetManager』 基于『AFNetworking 3.1』!最新版本的封装,集成了get/post 方法请求数据,单图/多图上传,视频上传/下载,网络监测 等多种网络请求方式!
3.7 『APP中的文字和APP名字的国际化多语言处理』 最全、最贴心的国际化处理博客!
3.8 3D Touch 的纯代码实现方法 详见:『BABaseProject』中的appdelegate
3.9 [『DSAlert』](https://github.com/DS-Team/DSAlert-OC](https://github.com/DS-Team/DSAlert-OC) 目前为止,最为精简的 alert 和 actionSheet 封装!DSAlert 让你的弹框不再孤单![『DSAlert』](https://github.com/DS-Team/DSAlert-OC](https://github.com/DS-Team/DSAlert-OC)!
3.10 最新、最全、最优美的友盟登录和分享的封装 详见:『BABaseProject』中的demo 4
3.11 最新、最全、最优美的 清理 APP 缓存的封装 详见:『BABaseProject』中的demo 2
3.12 最新、最全、最优美的 渐变navi 的封装 详见:『BABaseProject』中的tabbar 的 消息栏目
3.13 最新、最全、最优美的 获取所有系统设置跳转 的封装 详见:『BABaseProject』中的tabbar 的 消息栏目中demo 3

温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }