一、如何進行 cell 高度的緩存?說一下 UITableView-FDTemplateLayoutCell 的實現原理?html
緩存 cell 高度:git
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
解決方案:組件化
weakSelf.block = nil;
複製代碼
__weak typeof(self) weakSelf = self;
self.block = ^() {
__strong typeof(weakSelf) strongSelf = weakSelf;
NSLog(@"%@", strongSelf->_name);
};
複製代碼
在 block 仍是推薦使用點語法去訪問成員變量。佈局
三、isa 指針的做用?它的應用場景?post
做用:isa 指針指向它的類對象,從而能夠找到對象上的方法。
應用場景:
四、描述消息轉發機制?它的應用場景?
若是你給某個對象發送消息,而該對象沒有實現該方法的話,就會進行消息轉發,共有如下三步:
若以上三步皆不成功,則會報 unrecognized selector sent to …
的異常。
應用場景:
五、組件化的瞭解,各組件之間如何通訊?CTMediator 的底層實現原理?
組件化:按照項目功能模塊分割成多個組件來開發維護,以此來下降項目的耦合性。
各組件如何通訊:
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 在使用中遇到什麼問題?
沒遇到過啥問題-_-||,若是又遇到啥問題的同窗能夠在評論區提出來你們討論一下。