iOS对象间传值
属性赋值
直接通过数据模型中的 setter 方法赋值,因为 iOS 中有“点语法”,可以直接通过属性进行赋值。例如:
@interface Dog : NSObject
@property (nonatomic, assign) NSUInteger age;
@end
小狗类中存在属性 age, 那么,创建对象的时候就可以给对象的 age 进行赋值。
Dog * dog = [[Dog alloc] init];
// 属性传值
dog.age = 5;
代理传值
Boss *bossZhang = [[Boss alloc] init];
Worker * workerWang = [[Worker alloc] init];
bossZhang.delegate = workerWang;
[bossZhang delegateBuyWood:300];
老板类中有委托对应的
@implementation Boss
- (void) delegateBuyWood: (int)weight {
if ([_delegate conformsToProtocol:@protocol(BuyWoodDelegate)]) {
[_delegate buyWood:weight];
} else {
NSLog(@"老板委托的员工没有买木头的方法.");
}
}
@end
代码块传值
typedef void(^BuyWoodBlock)(NSUInteger amount);
@interface Employee : NSObject
- (void) doWork;
@property (nonatomic, copy) BuyWoodBlock buyWood;
@end
@implementation Employee
- (void) doWork {
NSLog(@"员工买了100顿木头回来啦...");
// 【代码块调用】 通过代码块将结果反馈给调用者
self.buyWood(100);
}
@end
如上代码为员工类的代码,在其他函数内部,可以在创建对象时,设定好代码块,这样执行函数后,就可以得到结果。
Employee * empl = [Employee new];
empl.buyWood = ^ (NSUInteger amount) {
NSLog(@"老板收到了员工买了 %ld 顿木头的消息啦~", amount);
};
[empl doWork];
单例传值
首先,在某个地方设置了单例对象的值
// 获取单例对象
NSUserDefaults * user = [NSUserDefaults standardUserDefaults];
// 设置单例对象中的值
[user setObject:@"jack" forKey:@"hero"];
然后,在其他地方都可以通过这个单例对象得到对应的值
// 获取单例对象
NSUserDefaults * user = [NSUserDefaults standardUserDefaults];
// 再次获取单例对象中的值
// 这样即可实现值传递
NSString * name = [user objectForKey:@"hero"];
NSLog(@"%@", name);