[iOS] Objective-C的单件模式

IOS开发开篇之Objective-C语法基础      首先声明:本系列技术博客只作学习之用,不存在其它目的。     作者从在吸收众多网友经验基础上,结合自己在IOS开发的经验将对IOS开发技术进行总结,以供后来者学习,更希望借此使自己对IOS开发的深入理解。      一、Objective-C与C的渊源      Objective-C诞生于 20 世纪 80 年代,由Brad Cox 发明,意在将流行的、可移植的 C 语言与优雅的 Smalltalk 语言结合在一起。Objective-C 是 C 语言的一个扩展集,它以 C 语言为基础,在语言 阅读详情
首先,苹果官方文档给出了单件模式的例子,代码见本文最后。
其方式是重写release,retain,retainCount,autoRelease,allocWithZone和copyWithZone等方法。

1 重写allocWithZone和copyWithZone的目的是外部在多次调用alloc的时候,内部能够确保对象只创建了一次。
2 重写release、retain、autorelease、retainCount避免单件对象被外部释放。(官方文档的旧版本没有重写这些方法导致对象有可能被Over-Release,即多次release,导致崩溃)

 两个缺点:
A 隐藏了在对象生命周期管理时出现的bug。
    对对象的引用出错的原因必然是程序本身的错误,隐藏对象的引用计数错误就是隐藏了应用程序的错误。
    从工程角度上讲,崩溃要比程序的逻辑错误容易定位。
    解决方法:建议在release、retain、autorelease里面做一些内部的调用次数监控,一旦发现外部调用不平衡就发出警告。
B 对象可以被多次init。
    多次调用init导致错误的可能性还是有的,这种错误包括重复加载某些资源降低性能。
    解决方法:重写init并在内部判重就可以了。
C 多线程安全
    解决方法:在sharedManager中加入同步代码块,代码:
+ (MyGizmoClass*)sharedManager
{
    @synchronized(self) {
		if (sharedGizmoManager == nil) {
			sharedGizmoManager = [[super allocWithZone:NULL] init];
		}
    }
    return sharedGizmoManager;
}
附官方单件模式的代码
static MyGizmoClass *sharedGizmoManager = nil;

+ (MyGizmoClass*)sharedManager
{
    if (sharedGizmoManager == nil) {
        sharedGizmoManager = [[super allocWithZone:NULL] init];
    }
    return sharedGizmoManager;
}

+ (id)allocWithZone:(NSZone *)zone
{
    return [[self sharedManager] retain];
}

- (id)copyWithZone:(NSZone *)zone
{
    return self;
}

- (id)retain
{
    return self;
}

- (NSUInteger)retainCount
{
    return NSUIntegerMax;  //denotes an object that cannot be released
}

- (void)release
{
    //do nothing
}

- (id)autorelease
{
    return self;
}







iOS Objective-c UITableView的简单使用 使用UITableView进行简单开发 1.类继承<UITableViewDelegate,UITableViewDataSource> 并添加一个UITableView属性,和一个数组,这个数组是表格上显示的数据 @interface ViewController ()<UITableViewDelegate,UITableViewDataSource> @prope... 阅读详情

相关推荐

iOS Objective-C 中JSON格式定义NSArray NSDictionary

做iOS开发已经两年多了。最近,在整理以前的代码,找到当时卡壳的一些代码片段,写博客跟大家分享一下。欢迎iOS初学者订阅我的博客,有什么问题可以留言交流。以下正文: 可能很多人不知道NSArray, NSDictionary有种很简单的初始化方法: NSArray *array = @[@"str0", @"str1", str"2"]; 相当于 [NSArray arrayWit

用了十年的昵称BadBoy 2635

IOS 单例或者单件实现

///单件实现 ////.h文件 @interface singleton:NSObject {     static singleton* _singleton; } - +(singleton*)GetInstance; //类方法 @end ///.m文件 @implemetation singleton staitc singleton::_singleton=n

369

iOS 面试策略之语言工具-Objective-C

Objective-C 是苹果为 iOS 和 Mac 开发量身定制的语言。它随着 iPhone 的出现而大火,直到今天国内外大多数的 App 依然是用 Objective-C 在写。 Objective-C 一度在 TIOBE 排行榜上位列第 3 名,仅次于 Java 和 C。其市场占有份额也远超其他语言。看名字我们可以知道,它与 C 语言有千丝万缕的联系,事实上也确实如此:Objective-C 是 C 语言的超集,它在 C 语言主体上加上了面向对象的特性。这是为了 App 开发的方便,同时也兼顾了语言

Jul7day的博客 370

Object -c 单例模式

单例模式:(Singleton) 类的对象只实例化一次,外界方便访问,提供共享数据,节约资源占用。 要点: 1.一个类只能实例化一次。 2.必须自行实例化。 3.必须向整个系统提供这个实例。 使用方式举例: // // main.m // 单例模式 // // Created by lzq on 16/4/5. // Copyright © 201

qq_24830831的博客 411

【Hypermesh】TetraMesh Panel 常用选项详解

结合Hypermesh 2020 帮助文档和自己的一点使用经验,整理了这个博客。

qgm1702的博客 3674

GAN模型中的常见变体有哪些,如DCGAN、WGAN和CGAN等?

生成对抗网络(GAN)是一种强大的深度学习模型,它由生成器和判别器两个网络组成,通过对抗训练的方式实现生成数据的能力。随着研究的发展,出现了许多GAN的变体,每个变体都有其独特的改进和特点。

huidhsu的博客 2260

Qt for iOS,Qt 与Objective C混合编程

介绍如何在 Qt 项目里使用 Objective C,介绍如何在 Qt Quick 界面上叠加 iOS 原生界面……

安晓辉生涯——聚焦程序员的职业规划与成长 2万+

SIwave仿真手册——信号完整性仿真之S参数的提取(二)

上一篇简单了讲述了软件的各个操作界面,本次博客更新关于的仿真,因为第二章完整的内容比较多,所以分成好几篇博客进行分享。

luohuo9844的博客 1万+

iOS开发 objective-c

iOS开发之OC

q28292929的博客 2512

IEC104协议下的文件传输与软件升级的技术细节与操作流程

本文深入探讨IEC104协议下的文件传输过程和软件升级机制,揭示其背后的技术细节和操作流程。

2401_86189088的博客 2523

零基础也能懂的Arduino ESP32离线安装包图文教程

手把手教你完成Arduino ESP32离线安装包的配置,无需联网也能快速搭建开发环境,适合初学者和网络受限用户,轻松实现arduino esp32离线安装包部署。

weixin_36213081的博客 2665

Objective-C语法之Objective-C语言和iOS系统(简介,语法,系统结构)

简介Objective-C,是扩充C的面向对象编程语言。它主要使用于Mac OS Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是在C的基础上,加入面向对象特性扩充而成的编程语言。目前,Objective-C主要应用于Mac OS X和iOS这两个NeXTSTEP的衍生系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在

空杯子 1万+

Python爬虫教程:抓取地方政府网站的公开文件与政策信息

Web爬虫是指一种自动化脚本,用于模拟人类浏览器访问网页、提取网页内容的数据抓取工具。发送请求到目标网页;获取网页内容;解析网页内容,提取所需数据;将数据保存或进一步处理。爬虫可以抓取各种形式的数据,如文本、图片、文件等。本教程将重点展示如何抓取地方政府网站上公开的政策文件、公告等信息。许多政府网站都会采取一定的反爬虫措施,防止大量数据被爬取。IP封锁:如果短时间内大量请求来自同一IP,可能会被封锁。验证码:一些网站会使用验证码来验证访问者是否为机器人。动态加载。

2201_76125261的博客 1980

基于Objective-C的iOS开发--入门篇

基于Objective-C的iOS开发--入门篇1、Objective-C 基础 1、Objective-C 基础 Objective-C,顾名思义,其扩展了标准的ANSI C语言,引入了消息传递机制和面向对象编程。(以下默认已具有C/C++语言基础) .h文件:头文件。 .m文件:源代码文件,可以包含Objective-C 和 C的代码。 .mm文件:源代码文件,可以包含Objective-C、C以及C++的代码。仅在需要使用C++特性时使用。 头文件引用:除了可以使用#include,Objectiv

LilyZJ的博客 6044

什么是 SAP Fiori 的 Technical Catalog

笔者之前的文章曾经提到一个叫做本文介绍 Technical Catalog 这个概念在 SAP Fiori 技术体系中的作用。首先我们如何在系统里查看这个 Catalog SAP_BASIS_TCR_T 里面包含的内容呢?如果大家照着本文开头那篇文章里提到的步骤,那么在自己系统里会创建好名叫的 PFCG role.我们登录 ABAP 系统,启动事务码 PFCG,打开这个 role, 就能看到它。展开之后,发现它扮演着一个容器的角色,里面包含了很多 ABAP 对象。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 742

心理学量表汇总 50多个 附下载

目录一、心理健康与精神病态量表二、行为问题量表三、人格评估量表四、智力测验一、心理健康与精神病态量表1.一般症状自评量表(SCL-90)症状自评量表 (The self-report symptom inventory ,Symptom checklist ,90,简称 SCL90) 有 90 个评定项目 , 每个项目分五级评分 , 包含了比较广泛的精神病症状学内容, 从感觉、 情 感、思维、意识、行为直至生活习惯、人际关系、饮食等均有涉及,能准确刻划被试的自觉 症状,能较好地反映被试的问题及其严重程度和变

南七小僧的学海无涯 1903

iOS Objective-C和C、C++混编

iOS Objective-C和C、C++混编,最简单的办法是直接将要调用C、C++代码的.m文件改成.mm文件。 1、Objective-C和C混编,如果C方法写在.m文件内部,我们直接调用即可。 #import "ViewController.h" @interface ViewController () @end @implementation ViewController // ...

programmer589的博客 1000

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

开源 Objective-C IOS 应用开发(六)Objective-C 和 C语言

Objective-C 在 C 的基础上添加了面向对象的特性,其核心是一个基于消息的、运行时的面向对象机制。// 类方法 (+ 号开头,类似C++的静态方法)// 声明 Person 类,继承自 NSObject (几乎所有ObjC类的根类)// 使用属性,self 指向当前对象(类似C++的this)// 实例方法 (- 号开头)发送消息是安全的,什么也不会发生(不像C/C++会崩溃)。

ajassi2000的博客 1396

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ios Objective-c 简易队列实现

满足一些特殊需求 接口部分(队列支持需求) #import <Foundation/Foundation.h> @interface XMQueue : NSObject ///队列追加 - (void)add:(id) obj; ///队列取出 - (id)next; ///返回队列最前端,不删除队列内元素 - (id)first; ///队列内是否还有元素 - (BOOL...

qq_41586150的博客 2000

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iOS系统的Javascript与Objective-C互操作指南

阐述Objective-C与Javascript相互调用的方法。

Joker.Lee的技术空间 1万+

【用objective-c写android和ios游戏】初次使用Stella SDK

为什么使用Stella SDK? 现在跨平台开发的工具越来越多,比如使用html5的Phone Gap,比如某姓王的提出来的Cocos2d-x等等,还有很多很多,这些平台都可以直接开发ios和android平台的应用,但是对于我却不满意,因为我只会写Objective-c,不会用javascript、c++等,我也不愿意再花大量的时间去学习js、c++、lua等,那怎么办?Stella

赤兔金马奖的专栏 4455

iOS Objective-C 面试整理

面试的好处如同考试,获得肯定或者知道不足。对于ios,object编程的一些面试题做一些整理,如下: 1、notification是多线程的吗? 通知是监听者模式在ios编程里的应用,ios 的通知机制,包括通知发布,通知监听,通知移除。通知的发布看书简单的接口调用,其实是cocoa为用户做了监听者模式的封装,我们运行时没有发现其阻塞我们的操作,发布通知时后台另启线程,接收时回调到主线程进行处理。 2、在项目什么时候选择使用GCD,什么时候选择NSOperation? 项目中使用NSOperation的优点

zhuxincheng_1218的专栏 750

iOS中Objective-C与JavaScript之间相互调用的实现

原文地址:http://blog.youkuaiyun.com/zhaoxy_thu/article/details/22794201 最近在iOS项目中需要使用到oc与js之间的相互调用,而且要求是实现方式必须与Android中的相同,方便js中统一处理。于是在对第三方库WebViewJavascriptBridge进行研究之后,仿照Android中的WebView与JS的交互机制,实现了一个,在

jianzhanger的专栏 2145

Objective-C

目前来说,Objective-C(简称OC)是ios开发的核心语言。一直由苹果公司在维护 OC在开发过程中也会配合着使用c语言、c++,OC主要负责UI界面,c语言、C++可用于图形处理。 Objective-C &Swift Swift和Objective-C共用一套运行时环境,Swift的类型可以桥接到Objective-C,反之亦然...

hxxjxw的博客 1049

iOS 开发 objective-C界面与H5交互

在当前的移动开发过程中,原生与H5的混合开发越来越多,H5界面在APP中的比例越来越大,H5不在仅仅是展示内容信息,儿此时的交互,也越来越多。接下来介绍一点iOS与H5交互的心得。iOS加载webView iOS加载webView还是非常方便的,声明webView,接着load一下,就可以了。@property (nonatomic,strong) UIWebView * webView;

wjchao1990的博客 2272

IOS开发笔记(一)—— Objective-C基础

中山大学数据科学与计算机学院本科生实验报告 (2019年春季学期) 一、实验题目 IOS基础 二、实现内容 学习IOS基础 掌握objective-c的语法 了解ios部分设计模式 三、实验结果 Objective-C学习笔记 1.SmallTalk 式的消息传递模型 在java中,方法调用: obj.method(argument); OC中,方法调用: [obj method:arg...

dick的博客 424
上一篇: Become a iOS coder iOS入门文档
下一篇: [iOS] ViewController的生命周期及其加载View的步骤
wihing
博客等级 码龄19年 55粉丝 36原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值