简单演示对象间通过BLOCK回调修改属性的功能

来源:互联网 发布:数据库nvl 编辑:程序博客网 时间:2024/05/19 06:50
////  ObjectA.h#import <Foundation/Foundation.h>/* 定义一个BLOCK,用于ObjectB的回调 */typedef void (^ObjAblock) (NSString *str);@interface ObjectA : NSObject@property (nonatomic, copy) NSString * name;/* BLOCK用于修改属性name */@property (nonatomic, copy) ObjAblock blockChangeName;@end

////  ObjectA.m#import "ObjectA.h"@implementation ObjectA@end
////  ObjectB.h#import <Foundation/Foundation.h>#import "ObjectA.h"@interface ObjectB : NSObject/* 引入ObjectA对象,目的在于回调ObjectA的块 */@property (nonatomic, strong) ObjectA * objA;/* 设置ObjectA的name属性 */- (void) setObjectAName: (NSString *) newName;@end
////  ObjectB.m#import "ObjectB.h"@implementation ObjectB- (void) setObjectAName: (NSString *) newName{    /* 调用回调函数修改ObjectA的属性 */    self.objA.blockChangeName(newName);}@end

////  main.m/* 测试BLOCK的回调功能: ObjectA中定义属性name,同时该对象有个BLOCK,可以修改该name. 在ObjectB中定义一个ObjectA属性,间接调用ObjectA的BLOCK,修改ObjectA的属性name。 */#import <Foundation/Foundation.h>#import "ObjectA.h"#import "ObjectB.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        ObjectA *objA = [[ObjectA alloc] init];        objA.name = @"prison break";                /* BLOCK中的对象设置为__block属性 */        __block ObjectA *tempObjA = objA;        objA.blockChangeName = ^(NSString *str)        {            tempObjA.name = str;        }; /* 注意有个分号 */                NSLog(@"orig:%@", objA.name);                ObjectB *objB = [[ObjectB alloc] init];        objB.objA = objA;        [objB setObjectAName: @"heroes"];                NSLog(@"changed:%@", objA.name);    }    return 0;}

输出:

2015-12-06 21:42:42.527 TestBlockFeedback[396:4896] orig:prison break2015-12-06 21:42:42.528 TestBlockFeedback[396:4896] changed:heroes









0 0