iOS面试题合集(上)

iOS面试题:浅谈设计模式

2021-07-15  本文已影响0人  iOS猿_员

创建型模式:

结构型模式:

delegate和block、Notification对比优缺点:delegate和block是一对一通信、block比delegate更加简洁清晰,但是如果通信事件较多时delegate运行成本较低且不易造成循环引用;
通知适合一对多通信,代码清晰简单,但问题查找溯源会比较困难,并且注册通知要注意在合适的时间移除,避免对野指针发送消息引起崩溃
注意:iOS9之后已经做了弱引用处理不需要移除了,之前版本使用不安全引用__unsafe_unretained是为了兼容旧版本)。

行为型模式:

- (void)viewDidLoad {
    NSMethodSignature *signature = [ViewController instanceMethodSignatureForSelector:@selector(sendMessageWithPhone:WithName:)]; // 方法签名:用来获得方法的返回类型和参数类型
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    invocation.target = self; // 目标:接收消息的对象
    invocation.selector = @selector(sendMessageWithPhone:WithName:); // 选择器:被发送的消息, 方法必须和签名中的方法一致。
    
    NSString *phone = @"13901234567";
    // 注意:设置参数的索引时不能从0开始,因为0已经被self占用,1已经被_cmd占用
    [invocation setArgument:&phone atIndex:2]; // 参数:可以添加任意数量的参数。
    NSString *name = @"9527";
    [invocation setArgument:&name atIndex:3];
    /*
     注:调用invocation的invoke方法,就代表需要执行NSInvocation对象中指定对象的指定方法,并且传递指定的参数
     */
    [invocation invoke];
}
- (void)sendMessageWithPhone:(NSString*)phone WithName:(NSString*)name {
    NSLog(@"电话号=%@, 姓名=%@",phone, name);
}
// 电话号=13901234567, 姓名9527

收录于网络,如有侵权,请联系小编删除


目录:iOS面试题大全

iOS面试题大全(上)

iOS面试题大全(中)

iOS面试题大全(下)

上一篇下一篇

猜你喜欢

热点阅读