分别使用OC和Swift语法创建单例
2016-08-04 09:08
405 查看
一、 OC中创建单例
/**
应用场景:网络工具,音频工具(切换界面时,背景音乐继续放,不会重新播放,不会暂停)
*/
@interface
Singleton :
NSObject
//提供的静态实例的创建方法。(全局访问点)
+(instancetype)sharedSinglenton;
-----------------------------------------------
//
OC的单例,每次调用的是一个全局使用的类函数
+(instancetype)sharedSinglenton{
//定义一个私有静态变量
static
id singlenton;
//是一个长整形,如果为0,就执行block中的代码!
static
dispatch_once_t onceToken;
//dispatch_once_t是GCD提供的结构体,使用时需要将GCD地址传递给下面的dispatch_once函数,dispatch_once函数能够记录该代码块是否被调用。
dispatch_once(&onceToken,^{
singlenton = [[self
alloc]init];
//self:本类
});
//dispatch_once是由GCD提供,作用是在整个应用程序的声明周期中只执行一次这个代码块。
return singlenton;
}
二、 Swift中创建单例
// 1.仿
OC
的写法!(仅供参考)
// 在
Swift
中不允许在函数中定义静态成员变量(保存在静态区的,有独立的存储空间)
static
var instance: SoundTools?
//没有初始化会报错,所以设置成可选项。
//长整形,0时执行下边的代码块。
static
var onceToken:
dispatch_once_t =
0
// 1.
提供全局的访问点(类函数)
返回值类型
class
func sharedTools() ->
SoundTools
{
print(“你好,我要创建声音对象")
//dispatch_once(predicate: UnsafeMutablePointer<dispatch_once_t>, block: dispatch_block_t)
//UnsafeMutable:不安全的变量,所以是var,
let是常量安全的,
//Pointer:指针,传递变量的时候使用&,表示变量的地址,
//<dispatch_once_t>变量的类型
//block: dispatch_block_t,
闭包,执行block时会将dispatch_once_t
的值修改为非0
dispatch_once(&onceToken) { () ->
Void
in
//实例化
instance =
SoundTools()
}
return instance!
//因为定义的instance是可选的,而我们返回时是必选的,所以需要强行解包。
}
----------------------------------------------------
//2.swift[b]特有的写法(利用静态区和常量的特点[/b])
//
静态区的对象只能设置一次数值(设完一次值之后,就不会再赋值了,不能改了)
// Swift
中的的单例写法和懒加载几乎一样
`static let`
//
同样也是在第一次使用时,才会创建对象
[b]//swift[b]写法单例调用的是一个放在静态区的常量[/b][/b]
//static let sharedTools2 = SoundTools()
static
let sharedTools2:
SoundTools = {
print("创建声音对象")
return
SoundTools()
//创建并返回一个ShareSingleton的对象
}()
-----------------------------------------------------
//和上面是一样的
static
let sharedTools3 =
SoundTools()
//第一次调用时通过(),调用下面的构造函数
//override
重写
构造函数
b031
override
init() {
print("创建")
super.init()
//让父类给变量赋初值
}
三、Swift和OC混编
1.桥接那个文件(swift调OC)
//
目的:让
Swift
能够调用
OC
//
使用:让所有
Swift
需要访问的
OC
的头文件在此处引入
#import
"NetworkTools.h"
2. OC调swift
在OC文件中导入:
#import
"单例演练-Swift.h"
// ProductName-Swift.h
注意 ProductName
不能包含中文和数字的组合`-`
//
注意:Swift
调用 OC
不会有问题
//
但是
OC
无法访问
Swift
中的特殊语法,例如:枚举!
可以修改项目名称
/**
应用场景:网络工具,音频工具(切换界面时,背景音乐继续放,不会重新播放,不会暂停)
*/
@interface
Singleton :
NSObject
//提供的静态实例的创建方法。(全局访问点)
+(instancetype)sharedSinglenton;
-----------------------------------------------
//
OC的单例,每次调用的是一个全局使用的类函数
+(instancetype)sharedSinglenton{
//定义一个私有静态变量
static
id singlenton;
//是一个长整形,如果为0,就执行block中的代码!
static
dispatch_once_t onceToken;
//dispatch_once_t是GCD提供的结构体,使用时需要将GCD地址传递给下面的dispatch_once函数,dispatch_once函数能够记录该代码块是否被调用。
dispatch_once(&onceToken,^{
singlenton = [[self
alloc]init];
//self:本类
});
//dispatch_once是由GCD提供,作用是在整个应用程序的声明周期中只执行一次这个代码块。
return singlenton;
}
二、 Swift中创建单例
// 1.仿
OC
的写法!(仅供参考)
// 在
Swift
中不允许在函数中定义静态成员变量(保存在静态区的,有独立的存储空间)
static
var instance: SoundTools?
//没有初始化会报错,所以设置成可选项。
//长整形,0时执行下边的代码块。
static
var onceToken:
dispatch_once_t =
0
// 1.
提供全局的访问点(类函数)
返回值类型
class
func sharedTools() ->
SoundTools
{
print(“你好,我要创建声音对象")
//dispatch_once(predicate: UnsafeMutablePointer<dispatch_once_t>, block: dispatch_block_t)
//UnsafeMutable:不安全的变量,所以是var,
let是常量安全的,
//Pointer:指针,传递变量的时候使用&,表示变量的地址,
//<dispatch_once_t>变量的类型
//block: dispatch_block_t,
闭包,执行block时会将dispatch_once_t
的值修改为非0
dispatch_once(&onceToken) { () ->
Void
in
//实例化
instance =
SoundTools()
}
return instance!
//因为定义的instance是可选的,而我们返回时是必选的,所以需要强行解包。
}
----------------------------------------------------
//2.swift[b]特有的写法(利用静态区和常量的特点[/b])
//
静态区的对象只能设置一次数值(设完一次值之后,就不会再赋值了,不能改了)
// Swift
中的的单例写法和懒加载几乎一样
`static let`
//
同样也是在第一次使用时,才会创建对象
[b]//swift[b]写法单例调用的是一个放在静态区的常量[/b][/b]
//static let sharedTools2 = SoundTools()
static
let sharedTools2:
SoundTools = {
print("创建声音对象")
return
SoundTools()
//创建并返回一个ShareSingleton的对象
}()
-----------------------------------------------------
//和上面是一样的
static
let sharedTools3 =
SoundTools()
//第一次调用时通过(),调用下面的构造函数
//override
重写
构造函数
b031
override
init() {
print("创建")
super.init()
//让父类给变量赋初值
}
三、Swift和OC混编
1.桥接那个文件(swift调OC)
//
目的:让
Swift
能够调用
OC
//
使用:让所有
Swift
需要访问的
OC
的头文件在此处引入
#import
"NetworkTools.h"
2. OC调swift
在OC文件中导入:
#import
"单例演练-Swift.h"
// ProductName-Swift.h
注意 ProductName
不能包含中文和数字的组合`-`
//
注意:Swift
调用 OC
不会有问题
//
但是
OC
无法访问
Swift
中的特殊语法,例如:枚举!
可以修改项目名称
相关文章推荐
- 开发经验之状态机思想,分别使用了swift,OC,C,PHP语言实现
- 使用 ASP.NET 语法创建 Web 服务器控件模板
- JavaScript 使用简略语法创建对象的代码
- OC中类和对象的创建和使用
- oc的switch中使用alloc,new语法报错解决方法
- 使用Swift开发iOS项目、UI创建、方法调用
- 黑马程序员-我的第十篇学习日记:OC中点语法,@property和@synthesize,完整创建一个可用对象
- Swift的?语法在函数参数的使用
- iOS使用Swift创建UITableView
- OC 属性的属性 点语法的使用 KVC
- JavaScript 使用简略语法创建对象的代码
- C#--第2周实验--任务13--创建一个抽象类A,创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串。
- C#高级——创建Person类,分别使用面向过程的方法和面向对象的方法
- 使用Swift开发IOS项目、UI创建、方法调用
- 分别使用创建XMLHttpRequest和jQuery实现用户注册前的验证
- SQL Server 语法 使用SQL语句创建数据库、表
- 使用Razor语法创建Ext.NET的MVC3项目
- 使用Swift创建Swift模块 - 静态链接库
- Swift 使用Builder 文件 创建 Rings
- [翻译]在VB中调用VC中创建的自动化服务器,使用语法OBJ1.OBJ2.Property