说起数据的传递方式,我们大概第一想到的就是参数了,而在OC中新增加了两种比较常用的传值方式——单例(静态对象)、通知(NSNotification)与匿名函数(Block)。
在介绍这两种传值方式之前,我们先介绍一下目前常用的一些传值方式:
1、参数传值
2、方法传值
3、属性传值
4、单例传值
5、通知
6、协议
7、匿名函数/代码块/block/闭包
参数传值
通过参数的方式将值进行传递,常见于各种语言中,一种基础的传值方式。
方法传值
通过方法的返回值来将需要的值传递,与参数传值相同也是一种常见的传值方式。
属性传值
通过对象属性的setter与getter语法进行传值,可在主程序中通过点语法进行调用。
单例传值
什么是单例?
单例是oc中设计模式的一种,它的大体概念是:设置一个全局的、不可销毁的静态对象,通过在内部方法中将其赋值,然后在外部通过读取这个静态对象的值来获得所需要的值的传值方式。
在程序中我们可以通过创建一个静态对象的方法实现。
如:我们需要在下面的对象中创建一个单例。
Book.h
#import "Book.h"
@interface Person : NSObject
@property (nonatomic, copy)NSString *name;
@property (nonatomic, retain)Book *book;
@end
Book.m:
@implementation Person
static Person *person = nil;
@end
创建初始化单例的方法:
#import "Book.h"
@interface Person : NSObject
@property (nonatomic, copy)NSString *name;
@property (nonatomic, retain)Book *book;
//以default,share,standard,getinstance开头
+ (Person *)standardPerson;
@end
实现文件:
@implementation Person
static Person *person = nil;
+ (Person *)standardPerson{
//保证单例唯一
if (!person) {
person = [[Person alloc] init];
}
return person;
}
@end
这样单例就创建好了,那么怎么通过单例传值呢?
我们在外部可以通过访问单例的方法和属性获取单例的值,如:
在外部类中我们可以直接通过方法访问单例:
@interface Book : NSObject
@property (nonatomic, copy)NSString *name;
//利用单例获取对象
- (void)getPerson;