关于ios:iOS-新东方面试

49次阅读

共计 2000 个字符,预计需要花费 5 分钟才能阅读完成。

作为一个开发者,有一个学习的气氛跟一个交换圈子特地重要,这是一个我的 iOS 交换群:761407670 不论你是小白还是大牛欢送入驻,分享 BAT, 阿里面试题、面试教训,探讨技术,

1、如何进行 cell 高度的缓存?说一下 UITableView-FDTemplateLayoutCell 的实现原理?

缓存 cell 高度:

  • 如果用的 frame,则给 model 增加一个 cellH 的属性,而后在获取数据时计算好高度赋值给 cellH。
  • 如果用的 AutoLayout,创立相应布局等同的 cell,计算好高度而后缓存。

FD 的实现:

fd_heightForCellWithIdentifier: configuration: 办法会依据 identifier 以及 configuration block 提供一个和 cell 布局雷同的 template layout cell,并将其传入 fd_systemFittingHeightForConfiguratedCell: 这个公有办法返回计算出的高度。次要应用技术为 runtime。

2、在 Block 中应用 成员变量 (如:_name) 会造成循环援用吗 (比方上面的代码)?如何解决?

typedef void(^TestBlock)(void);

@interface DetailViewController ()
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) TestBlock block;
@end

@implementation DetailViewController

- (void)viewDidLoad {[super viewDidLoad];
    self.name = @"fzh";
    
    self.block = ^() {NSLog(@"%@", _name);
    };
}

@end
复制代码 

会造成循环援用,因为 _name 底层也是通过 self 去获取 (self->_name)。

-> : 指向构造体成员运算符。

解决方案:

  • 强制将 block 置空,代码如下:
weakSelf.block = nil;
复制代码 
  • 通过 weak、strong self 来解决,代码如下:
__weak typeof(self) weakSelf = self;
    
self.block = ^() {__strong typeof(weakSelf) strongSelf = weakSelf;
    NSLog(@"%@", strongSelf->_name);
};
复制代码 

在 block 还是举荐应用点语法去拜访成员变量。

3、isa 指针的作用?它的利用场景?

作用 :isa 指针指向它的类对象, 从而能够找到对象上的办法。

利用场景:

  • KVO – isa 混写 (isa-swizzling)

4、形容音讯转发机制?它的利用场景?

如果你给某个对象发送音讯,而该对象没有实现该办法的话,就会进行音讯转发,共有以下三步:

  • Method resolution
  • Fast forwarding
  • Normal forwarding

若以上三步皆不胜利,则会报 unrecognized selector sent to … 的异样。

利用场景:

  • 特定奔溃预防解决
  • 苹果零碎 API 迭代造成 API 不兼容的奔溃解决

5、组件化的理解,各组件之间如何通信?CTMediator 的底层实现原理?

组件化 :依照我的项目功能模块宰割成多个组件来开发保护,以此来升高我的项目的耦合性。

各组件如何通信

  • 创立一个 Mediator,各组件通过 Mediator 通信,即 runtime 调度。
  • 注册表的形式,用 URL 示意接口,在模块启动时注册模块提供的接口,即 URL/protocol 注册调度。

CTMediator 次要是基于 Mediator 模式和 Target-Action 模式,两头采纳了 runtime 来实现调用。

6、array 的 copy 和 mutableCopy 的区别?mutableCopy 如果每个元素都是对象,那么会开拓新的内存空间吗?如何开拓新的内存空间?

copy 为指针拷贝 (内存地址统一),mutableCopy 为内容拷贝 (内存地址不统一)。

如果元素为对象,不会开拓新的内存空间,因为 mutableCopy 是单层浅复制,咱们须要给对象独自实现一个深复制的办法才能够。

- (id)deepCopy {CYLUser *copy = [[[self class] alloc]
                    initWithName:_name
                    age:_age
                    sex:_sex];
   copy->_friends = [[NSMutableSet alloc] initWithSet:_friends
                                            copyItems:YES];
   return copy;
}
复制代码 

7、Fastlane 在应用中遇到什么问题?

没遇到过啥问题 -_-||,如果又遇到啥问题的同学能够在评论区提出来大家讨论一下。

作者:_GodIsCoder
链接:https://juejin.im/post/684490…

正文完
 0