//单例设计模式
/*
1、单例是一种设计模式 是开发人员在开发过程中总结出来的简单方法
2、 如果某个对象在整个工程中有且只有一个(唯一的)就必须使用单例设计模式创建该对象
3、单例设计模式创建的对象在整个工程的任意位置任意时间都是共享的 相当于全局变量 作用域在整个工程
4、整个工程中可能创建多个对象指针 但是对象任意一个对象指针 指向的对象都是同一个 也就是指针指向同一个内存空间
5、单例方法只有在第一次调用的时候创建一个对象 后面多次调用都不会创建新的对象 这样就确保该对象在整个工程中有且只有一个的
6、单例方法是一个类方法 返回值是一个对象指针
7、单例方法的命名格式:share/default+类名
*/

//定义单例方法

#import <Foundation/Foundation.h>
@interface Forum : NSObject
{
NSMutableArray*infoArr; //存放所有留言信息
}
//确保对象在整个工程中是唯一的
+(Forum*)defaultForum;
//添加内容
-(void)addMessageInForum:(NSDictionary*)info;
//内容包括两部分:一部分是用户的姓名 一部分是用户的留言信息 //显示所有的留言内容
-(void)showALLinfo; @end
#import "Forum.h"
@implementation Forum -(id)init //初始化 数组infoArr
{
if (self=[super init]) {
infoArr=[[NSMutableArray alloc]init];
}
return self;
}
+(Forum*)defaultForum
{
static Forum*forum=nil;
if (forum==nil) {
forum=[[Forum alloc]init];
}
return forum;
}
-(void)addMessageInForum:(NSDictionary *)info
{
[infoArr addObject:info];
}
-(void)showALLinfo
{
for(id character in infoArr)
{ NSArray*keys=[character allKeys];
NSLog(@"%@:%@",[keys lastObject],[character objectForKey:[keys lastObject]]);
} } @end

//Student 类

#import <Foundation/Foundation.h>

@interface Student : NSObject
@property(nonatomic,retain)NSString*name; -(void)write:(NSString*)message;
@end

//单例方法的引用

#import "Student.h"
#import "Forum.h"
@implementation Student -(void)write:(NSString*)message
{
Forum*newarr=[Forum defaultForum];
NSMutableDictionary*dic=[NSMutableDictionary dictionaryWithObjectsAndKeys:message,self.name, nil];
[newarr addMessageInForum:dic];
} @end

//Teacher类 同上

//主函数调用

#import <Foundation/Foundation.h>
#import "Forum.h"
#import "Teacher.h"
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool { //1、添加信息(信息包括 用户名称 用户留言)
//2、将信息所有内容显示出来
//3、添加内容的类有两个,一个老师类 一个学生类
Teacher*t1=[[Teacher alloc]init];
t1.name=@"lijie";
[t1 writeinfo:@"1503"];
Teacher*t2=[[Teacher alloc]init];
t2.name=@"sun";
[t2 writeinfo:@"飘过"]; Student*s1=[[Student alloc]init];
s1.name=@"xiao";
[s1 write:@"hello"];
Student*s2=[[Student alloc]init];
s2.name=@"guang";
[s2 write:@"nimenhao"]; Forum*forum=[Forum defaultForum];
[forum showALLinfo]; }
return 0;
}

//打印结果:

2016-12-23 10:52:35.527 7.4论坛留言[18397:655774] lijie:1503
2016-12-23 10:52:35.528 7.4论坛留言[18397:655774] sun:飘过
2016-12-23 10:52:35.528 7.4论坛留言[18397:655774] xiao:hello
2016-12-23 10:52:35.528 7.4论坛留言[18397:655774] guang:nimenhao

ios-UserDefaults的更多相关文章

  1. iOS开发系列--Swift 3.0

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

  2. iOS开发之记录用户登录状态

    iOS开发之记录用户登录状态 我们知道:CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信 ...

  3. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

  4. iOS之数据持久化方案

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  5. iOS 多快好省的宏定义

    http://my.oschina.net/yongbin45/blog/150149 // 字符串:#ifndef nilToEmpty#define nilToEmpty(object) (obj ...

  6. iOS 两行代码解决数据持久化

    在实际的iOS开发中,有些时候涉及到将程序的状态保存下来,以便下一次恢复,或者是记录用户的一些喜好和用户的登录信息等等. 这就需要涉及到数据的持久化了,所谓数据持久化就是数据的本地保存,将数据从内存中 ...

  7. iOS的数据持久化

    所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) pr ...

  8. iOS通用的MVC模式项目框架MobileProject

    最近项目比较不赶的情况下,决定把一些通用.常用的内容集成在一个项目框架中,意在新项目中可以快速搭建:其实经过几个项目后,总是有一些重复的创建工作,可以使用本项目的内容直接进行开发:采用的是MVC的分层 ...

  9. IOS整体项目层级构建

    在创建IOS项目时,若有一个比较明确的层级架构,将对于今后代码的维护或者功能的扩展很有帮助:本文将通过一个实例来展现我对于层级的一些观点:里面有一些零碎的知识点可能无法全部介绍,到时提供源代码进行下载 ...

  10. iOS中的存储方式

    1.Plist 1.1 了解沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其它文件系统隔离.应用必须呆在自己的沙盒里.其它应用不能访问该沙盒. 一个程序中所有的非代码文件都可以 ...

随机推荐

  1. Android 一些基本组件的使用

    Dialog 基本用法 ,带自定义view AlertDialog dialog = new AlertDialog.Builder(context).setTitle("写入信息" ...

  2. php之获取程序源码的方法

    文件hello.php和index.php在同一目录 hello.php <?php class hello{ public function __construct() { echo 'hel ...

  3. HTML文档、javascript脚本的加载与解析

    1.onload事件 1.1 onload事件分类 a.文档加载完成事件(包括脚本.图片等资源都加载完),绑定方法:<body onload="doSomething()"& ...

  4. Redis 复制、Sentinel的搭建和原理说明

    背景: Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端) ...

  5. 水平时间轴 html + css

    比较粗糙,效果如图 这个是写微信页面时写的,pc 也是一样的效果 代码如下: <div class="time_line_box"> <div class=&qu ...

  6. jquery中使用serialize() 序列化表单时 中文乱码问题

    序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 1 原因:.serialize()自动调用了encodeURICo ...

  7. .NET LINQ查询操作中的类型关系

    LINQ 查询操作中的类型关系      若要有效编写查询,您应该了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果您了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. 另外 ...

  8. 数据库Blob数据类型转String

    blob数据是存储大对象数据类型, 一般存放二进制的,所以才用字节存取. 首先判断blob数据是否为空,然后采用输入流读出数据,具体代码如下: String content = null; try { ...

  9. /var/run/yum.pid 已被锁定,PID 为 XXXX 的另一个程序正在运行。

    安装st-load时, 终端提示 “/var/run/yum.pid 已被锁定,PID 为 13908 的另一个程序正在运行.” 解决方法:直接在终端运行 rm -f /var/run/yum.pid ...

  10. webbench之使用(二)

    [root@lam7 ~]# webbench -helpwebbench [option]... URL -f|--force                Don't wait for reply ...