iOS 新東方面試

一、如何進行 cell 高度的緩存?說一下 UITableView-FDTemplateLayoutCell 的實現原理?html

緩存 cell 高度:git

  • 若是用的 frame ,則給 model 添加一個 cellH 的屬性,而後在獲取數據時計算好高度賦值給 cellH。
  • 若是用的 AutoLayout,建立相應佈局等同的 cell,計算好高度而後緩存。

FD 的實現:github

fd_heightForCellWithIdentifier: configuration: 方法會根據 identifier 以及 configuration block 提供一個和 cell 佈局相同的 template layout cell,並將其傳入 fd_systemFittingHeightForConfiguratedCell: 這個私有方法返回計算出的高度。主要使用技術爲 runtime 。緩存

二、在 Block 中使用 成員變量 (如:_name) 會形成循環引用嗎(好比下面的代碼)?如何解決?bash

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)。框架

-> : 指向結構體成員運算符。ide

解決方案:組件化

  • 強制將 block 置空,代碼以下:
weakSelf.block = nil;
複製代碼
  • 經過 weak、strong self 來解決,代碼以下:
__weak typeof(self) weakSelf = self;
    
self.block = ^() {
    __strong typeof(weakSelf) strongSelf = weakSelf;
    NSLog(@"%@", strongSelf->_name);
};
複製代碼

在 block 仍是推薦使用點語法去訪問成員變量。佈局

三、isa 指針的做用?它的應用場景?post

做用:isa 指針指向它的類對象,從而能夠找到對象上的方法。

應用場景:

  • KVO - isa 混寫 (isa-swizzling)

四、描述消息轉發機制?它的應用場景?

若是你給某個對象發送消息,而該對象沒有實現該方法的話,就會進行消息轉發,共有如下三步:

  • Method resolution
  • Fast forwarding
  • Normal forwarding

若以上三步皆不成功,則會報 unrecognized selector sent to … 的異常。

應用場景:

  • 特定奔潰預防處理
  • 蘋果系統 API 迭代形成 API 不兼容的奔潰處理

五、組件化的瞭解,各組件之間如何通訊?CTMediator 的底層實現原理?

組件化:按照項目功能模塊分割成多個組件來開發維護,以此來下降項目的耦合性。

各組件如何通訊

  • 建立一個 Mediator,各組件經過 Mediator 通訊,即 runtime 調度。
  • 註冊表的方式,用URL表示接口,在模塊啓動時註冊模塊提供的接口,即 URL/protocol 註冊調度。

CTMediator 主要是基於Mediator模式和Target-Action模式,中間採用了 runtime 來完成調用。

六、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;
}
複製代碼

七、Fastlane 在使用中遇到什麼問題?

沒遇到過啥問題-_-||,若是又遇到啥問題的同窗能夠在評論區提出來你們討論一下。

參考

相關文章
相關標籤/搜索