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);
posted @ 2016-05-12 09:21  lvye1221  阅读(6)  评论(0编辑  收藏  举报