老虎国际
1.组件化,怎么通信的,有没有公共数据,组件传值,多个组件都可以修改这个值 值变化时通知到另一个组件
2.SDK 体积优化,构建提效,为啥构建那么久
3.IM 页面复杂吗?底层怎么实现的?IM 从数据库读出来的和接口拉回来的数据怎么合并,有冲突了怎么办?IM 的异常场景,发送失败之类的
4.SSE 直接更新 UI 和其他方式
5.鸿蒙遇到的问题,有没有鸿蒙版本的问题,用的是 V2 还是 V1
算法:
从4个算法题中选择,要求用 OC 或 Swift 实现,用飞书运行
1.子串是否是回文子串
2.数组是否是调性数组
参考答案
1.组件化,怎么通信的,有没有公共数据,组件传值,多个组件都可以修改这个值 值变化时通知到另一个组件
共享数据模型:
单例 + Notification
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @interface SharedModel : NSObject @property (nonatomic, copy) NSString *value; + (instancetype)shared; @end
@implementation SharedModel + (instancetype)shared { static SharedModel *instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[SharedModel alloc] init]; }); return instance; } @end
[SharedModel shared].value = @"new value"; [[NSNotificationCenter defaultCenter] postNotificationName:@"SharedValueDidChange" object:nil userInfo:@{@"newValue": [SharedModel shared].value}];
[[NSNotificationCenter defaultCenter] addObserverForName:@"SharedValueDidChange" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { NSLog(@"值变化: %@", note.userInfo[@"newValue"]); }];
|
单例 + KVO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [[SharedModel shared] addObserver:self forKeyPath:@"value" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { if ([keyPath isEqualToString:@"value"]) { NSLog(@"值变化:%@", change[NSKeyValueChangeNewKey]); } }
|
单例 + Block 回调(自定义)
你也可以在 SharedModel 里维护一个回调列表,当值修改时手动调用回调。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| typedef void(^ValueChangeBlock)(NSString *newValue);
@interface SharedModel : NSObject @property (nonatomic, copy) NSString *value; @property (nonatomic, strong) NSMutableArray<ValueChangeBlock> *observers; + (instancetype)shared; - (void)addObserver:(ValueChangeBlock)block; @end
@implementation SharedModel + (instancetype)shared { static SharedModel *instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[SharedModel alloc] init]; instance.observers = [NSMutableArray array]; }); return instance; }
- (void)setValue:(NSString *)value { _value = [value copy]; for (ValueChangeBlock block in self.observers) { block(value); } }
- (void)addObserver:(ValueChangeBlock)block { [self.observers addObject:[block copy]]; } @end
[[SharedModel shared] addObserver:^(NSString *newValue) { NSLog(@"值变化了:%@", newValue); }]; [SharedModel shared].value = @"hello";
|
2.SDK 体积优化,构建提效,为啥构建那么久
3.IM 页面复杂吗?底层怎么实现的?IM 从数据库读出来的和接口拉回来的数据怎么合并,有冲突了怎么办?IM 的异常场景,发送失败之类的
4.SSE 直接更新 UI 和其他方式
5.鸿蒙遇到的问题,有没有鸿蒙版本的问题,用的是 V2 还是 V1
算法:
从4个算法题中选择,要求用 OC 或 Swift 实现,用飞书运行
1.子串是否是回文子串
2.数组是否是调性数组