iOS 面试题汇总(四)

1.熟悉 CocoaPods 么?能大概讲一下工作原理么?

A:熟悉,CocoaPods 是一个依赖管理工具,它通过 Podfile 来表达依赖,每个依赖都有一个 podspec 。 podspec 文件存储着该依赖的基本信息:包含哪些文件,静态库,资源文件等,依赖哪些第三方库、系统框架,之后 pod 会创建一个工程,把这个库以 target 的形式包含进来,应用则依赖这个 pod 工程。

2.最常用的版本控制工具是什么,能大概讲讲原理么?

A: 最常用的版本控制工具是 Git。它的大致原理是工程每次提交时所有更改的文件都会生成快照,快照代表当前版本的文件,这些快照通过树型结构组织起来,树随着工程更改生长,通过这种方式来进行版本管理。

3.你一般是怎么用 Instruments 的?

A:根据想要分析的问题,选择对应的 instruments 来分析应用的行为,有疑问的地方参考 Instruments User Guide.

4.你一般是如何调试 Bug 的?

A:对于容易复现的 bug,根据复现的步骤来定位问题,之后解决问题;对于不容易复现的 bug, 调试就比较难了,这时可以配合源码,猜测问题可能出现的原因,一步步验证假设来定位 bug,确定 bug 产生的原因才好解决。

5.你在你的项目中用到了哪些设计模式?

A:

创建型:

  • 工厂方法(Factory Method)
  • 原型(Prototype)
  • 单例(Singleton)

结构型:

  • 适配器(Adapter)
  • 桥接(Bridge)
  • 组成(Composite)
  • 装饰(Decorator)
  • 外观(Facade)
  • 享元(Flyweight)

行为型:

  • 职责链(Chain Of Responsibility)
  • 命令(Command)
  • 解释器(Interpreter)
  • 迭代器(Iterator)
  • 中介者(Mediator)
  • 备忘录(Memento)
  • 观察者(Observer)
  • 状态(State)
  • 策略(Strategy)
  • 模板方法(Template Method)
继续阅读

iOS App 开发问题汇总(八)

1.Detect hash tags #, mention tags @, in iOS like in Twitter App

A:You can use https://github.com/Krelborn/KILabel this library. It also detect user taps on hashtags Like this:

1
2
3
label.hashtagLinkTapHandler = ^(KILabel *label, NSString *string, NSRange range) {
  NSLog(@"Hashtag tapped %@", string);
};

Reference:Detect hash tags #, mention tags @, in iOS like in Twitter App

2.如何给应用重签名?

A:利用用途广泛的命令行工具 security快速地显示出你的系统中能用来对代码进行签名的认证的方法:

1
2
$ security find-identity -v -p codesigning                       
  1) 01C8E9712E9632E6D84EC533827B4478938A3B15 "iPhone Developer: Thomas Kollbach (7TPNXN7G6K)"

sign给应用重签名

1
$ sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"

Reference:代码签名探析

继续阅读

iOS App 开发问题汇总(七)

1.如何设置透明的导航栏并且去掉其底部灰色的分隔线?

A:可以通过设置导航栏的背景图和阴隐图为透明的图片来实现。

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
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    
    self.translucent = self.navigationController.navigationBar.isTranslucent;
    self.navigationController.navigationBar.translucent = YES;
    
    self.previousImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault];
    
    UIImage *newImage = [UIImage imageNamed:@"TransparentPixel"];
    [self.navigationController.navigationBar setBackgroundImage:newImage forBarMetrics:UIBarMetricsDefault];
    
    self.previousShadowImage = self.navigationController.navigationBar.shadowImage;
    self.navigationController.navigationBar.shadowImage = newImage;
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    
    self.navigationController.navigationBar.translucent = self.translucent;
    
    [self.navigationController.navigationBar setBackgroundImage:self.previousImage forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = self.previousShadowImage;
}

Reference:Apple’s sample code Customizing UINavigationBar
Separator between navigation bar and view - iOS 7

继续阅读