iOS 如何创建单例对象
一、什么是单例?
说到单例我就想起了我的java啊 ,不禁感叹起我的大学时光,学了4年的java开发,到现在还是放弃了我的java,踏入了iOS的行列。
算了,入正轨,我现在正是铁树银花的青春美少女,不要抱怨,少说多做,要相信自己,要勇于拼搏,送自己一句话: 不论你在什么时候开始,重要的是开始之后就不要停止。
单例模式是一种常见的设计模式。“单”是指唯一性,“例”是指实例化对象,也就是使某个类的一个对象成为系统中的唯一实例。
这样有什么优点呢?
1.在内存中只有一个对象,节省内存空间。
2.避免频繁的创建销毁对象,可以提高性能。
3.避免对共享资源的多重占用。
4.可以全局访问。
例如,由于项目的需求,我需要写我的登录模块,而且需求要求每次确保一个用户登录,而且在项目中大量用到登录用户的登录的账户名,判断登录状态,这个时候,我就可以把登录用户 用单例模式来创建,登录成功的时候给单例赋值,这样就确保了只有一个对象存在,在其他类里面也可以共享这个单例了。
二、如何创建iOS中的单例?
//
// UserEntity.h
// Community
//
// Created by Juncy_Fan on 13-6-15.
// Copyright (c) 2013年 macmini. All rights reserved.
// #import <Foundation/Foundation.h> @interface UserEntity : NSObject
{
NSString *userName; //存储登录用户的用户名
BOOL isLogin;//存储登录状态
} @property (copy, nonatomic) NSString *userName;
@property (assign, nonatomic) BOOL isLogin; @end
下面是.m文件
//
// UserEntity.m
// Community
//
// Created by Juncy_Fan on 13-6-15.
// Copyright (c) 2013年 macmini. All rights reserved.
// #import "UserEntity.h" @implementation UserEntity
@synthesize userName;
@synthesize isLogin; @end
其次,我写一个工具类Util,来帮助我存储登录用户,实现单例模式
//
// Util.h
// Community
//
// Created by Juncy_Fan on 13-6-5.
// Copyright (c) 2013年 macmini. All rights reserved.
// #import <Foundation/Foundation.h>
#import "UserEntity.h" @interface Util : NSObject
//获取当前的用户信息
+(UserEntity * )getCurrentUserInfo;
@end
下面就去实现单例模式吧
//
// Util.m
// Community
//
// Created by Juncy_Fan on 13-6-5.
// Copyright (c) 2013年 macmini. All rights reserved.
// #import "Util.h"
#import "Constants.h"
@implementation Util
//当前登录用户的信息 为单例模式
+(UserEntity * )getCurrentUserInfo
{
static dispatch_once_t pred;
static UserEntity *currentUser;
dispatch_once(&pred, ^{
currentUser = [[UserEntity alloc] init];
});
return currentUser;
} @end
三、如何使用单例对象
if ([loginflag isEqualToString:kLoginSuccessFlag]) /*如何判断登录成功*/
{
//存储登录用户到单例
UserEntity *user = [Util getCurrentUserInfo];
user.isLogin = YES;
user.userName = _nameTextField.text;
//跳转页面的代码。。。。。。。。
}
在某些地方需要判断用户是否登录的时候
if ([Util getCurrentUserInfo].isLogin == YES)
{
NSString *userName = [Util getCurrentUserInfo].userName;//已经登录状态,获取登录用户名
}
else
{
NSLog(@"未登录状态");
}
iOS 如何创建单例对象的更多相关文章
- iOS:创建单例对象的两种方式
单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClas ...
- [iOS dispatch_once创建单例]
自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行, ...
- scala学习手记14 - 单例对象
java中的单例模式都很熟悉了:简单地说就是一个类只能有一个实例.在scala中创建单例对象非常简单,创建类时使用object关键字替换class即可.因为单例类无法初始化,所以不能向它的主构造函数传 ...
- iOS 创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + (Ac ...
- 【iOS开发】创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + ( ...
- IOS:利用dispatch_once创建单例
在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:<IOS学习笔记4—Objective C—创建单例>自苹果引入了Grand Central Dispatch (GCD)(M ...
- 不允许在单例对象中创建Srping容器
spring.net在使用的时候,不允许在单例对象中创建Srping容器 需要将实例化模式转为单例singleton=“false”
- Spring IoC 中的(Singleton)单例对象创建过程探索
前言 之前将spring framework 源码导入了idea,后来折腾调试了一下,于是研究了一下最简单的singleton对象在spring中是如何创建的.这里所谓的简单,就是指无属性注入,无复杂 ...
- iOS大神班笔记02-模仿苹果创建单例
首先我们得要知道苹果是如何实现单例的:1.不能外界调用alloc,一调用就崩掉,其实就是抛异常(类内部第一次调用alloc就不崩溃,其他都崩溃). 2.提供一个方法给外界获取单例. 3.内部创建一次 ...
随机推荐
- POJ 2455 网络流 基础题 二分+网络流 dicnic 以及 sap算法
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8189 Accepted: ...
- 深入理解mysql之BDB系列(1)---BDB相关基础知识
深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...
- “Clang” CFE Internals Manual---中文版---"Clang"C语言前端内部手册
原文地址:http://clang.llvm.org/docs/InternalsManual.html 译者:史宁宁(snsn1984) "Clang"C语言前端内部手册 简介 ...
- oracle忘记密码,修改密码,解锁
忘记密码修改密码: alter user system identified by values abc111; 修改后的用户名system,密码abc111. 解锁: cmd->输入 :sql ...
- C#多线程的死锁演示
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- QT中的pro文件的编写
原地址:http://blog.csdn.net/fjb2080/article/details/4833666 我们在编译QT的工程的时候,一般都会让qmake自动生成,但有时我们需要定制我们的工程 ...
- 在chrome中使用axure生成原型的问题
来自:非原型不设计
- 【IOS实例小计】UIImageView
预备知识: UIImage 是一个专门存储图片数据的对象,默认兼容的图片格式是 PNG,可以通过文件.Quartz image对象或 image Data数据得到一个图片对象. UIImage相关功能 ...
- Ext JS4百强应用:设置textfield的悬浮提示信息 --第8强
在Extjs4中有时候我们需要textfield的提示信息,但是我们发现textfield并没有这样的配置项. 这时候我们就要另想方法:我们需要在鼠标悬停在textfield组件的时候进行信息的提示, ...
- SDUTOJ 1489 求二叉树的先序遍历
<img src="http://img.blog.csdn.net/20141014212549703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi ...