[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

STM32无线遥控小车的设计

基于SPI通信的无线摇杆小车的设计

weixin_69414084的博客 2927

PCIe 6.0实战指南:从链路训练到信号完整性的避坑手册

本文是一份针对PCIe 6.0硬件工程师的实战避坑指南。文章深入解析了从NRZ到PAM4调制带来的信号完整性挑战,详细拆解了链路训练(LTSSM)的复杂过程与调试方法,并提供了从信道仿真到实验室实测(如使用Keysight示波器进行眼图与误码率分析)的完整信号完整性闭环验证策略,帮助工程师解决高速率下的链路不稳定与降速问题。

weixin_29306875的博客 341

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

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

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

【电路设计】带阻滤波器实战:从理论到Twin-T陷波电路实现

本文详细介绍了带阻滤波器的原理与Twin-T陷波电路的实战应用,从基础概念到工程实现全面解析。通过具体案例展示如何设计高Q值滤波器,解决电源噪声等实际问题,并分享PCB布局和元件选型的实用技巧,助力工程师提升电路设计能力。

gg901的博客 1011

iOS开发 objective-c

iOS开发之OC

q28292929的博客 2512

基于云平台的ATS系统微服务架构方案研究

在当前智慧地铁的升级转型过程中,城市轨道交通ATS系统面临着稳定性差、运维方 式繁琐和故障应急处理效率低等问题。为此,提出一种基于云平台的ATS系统微服务架构方案; 研究了ATS系统在云平台上的微服务总体架构、ATS应用的微服务划分和设计、容器部署方式 及通信交互模式,可实现系统松耦合和易扩展,达到节约计算资源、提高系统稳定性和运营效 率的目的

mi_lan1的博客 966

流体动力学仿真软件:SU2_(1).SU2简介与安装

SU2 是一个开源的计算流体动力学(CFD)和计算结构动力学(CSD)仿真软件,由斯坦福大学的航空航天系开发。它主要用于解决流体动力学问题,包括但不限于空气动力学、热力学、化学反应流等。SU2 的特点在于其高度的灵活性和可扩展性,使其成为科研和工业领域中非常受欢迎的工具。SU2 采用有限体积法(FVM)和有限元法(FEM)进行数值求解,支持多种物理模型和求解器,如 Euler 方程、Navier-Stokes 方程、RANS 方程等。

kkchenjj的博客 1311

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万+

运放+MOS恒流源电路仿真分析

利用运放设计一个恒流源

HW-BASE的博客 4081

基于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

Codex 100个真实案例 - 用AI做在线考试系统(自动组卷+防作弊)

本案例使用 Codex 从零搭建一个功能完整的在线考试系统。涵盖题库管理(单选/多选/判断/填空)、智能随机组卷、考试倒计时、自动判分、成绩统计分析、以及多维度防作弊机制(切屏检测、禁止复制粘贴、IP限制等)。前端使用 Vue 3 + Element Plus 构建考试界面,后端使用 Node.js + Express + MySQL 提供 API 服务。全程用自然语言驱动 Codex 完成开发,最终交付一个可直接部署的在线考试平台。

yueyeguzhuo的专栏 77

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2185

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

ajassi2000的博客 1396

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ios Objective-c 简易队列实现

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

qq_41586150的博客 2000

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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、付费专栏及课程。

余额充值