Lmsgsendnilself

Uninhibited Soul, Free Craziness

记一奇葩至极的bug

| Comments

新版本上线了,依然像往日每次上线一样,期待新版本的用户使用情况。

然而,第二天刚坐上班车,打开微信一看,产品经理发了appstore截图,几个用户反馈app崩溃,不科学吧?测试也没问题呀,难道是偶现。赶紧查着fabric,由于用户体量不小,唰唰的crash在暴增,崩溃率也降至98%。我可是对自己的代码质量和管理规范非常有信心的,而且历史一直如此,难道失足了? 赶紧分析量最大的几个crash,然而涉及貌似不只一处:导航栏的问题、内存泄漏问题、图片问题、移除view的问题、广告相关的问题 ?

NSOperation和NSOperationQueue的同步异步问题

| Comments

  前几天,同事问我NSOperation和NSOperationQueue的同步异步的事情,说看文档看的有点懵逼,于是研究了下文档细节,好好交流了这件事。缕了一下细节。

  1. NSOperation的start和main方法

       首先这俩方法都是调用执行NSOperation的,

最大堆

| Comments

  由于最近在项目中用到了最大堆的思想来处理一个事件集,因此专门用iOS实现了一下最大堆的代码。   首先,我们看一下堆的定义:
  n个元素的序列{k1,k2,…,kn},当且仅当满足如下关系时被成为堆

多个github账户配置

| Comments

  最近由于遇到有两个github账号需要同时使用,ssl配置需要专门处理下,大概需要做的事情如下:

  1. 新建两个ssh key并将key添加至ssh agent

    进入.ssh文件夹
    $ cd ~/.ssh

    新建 ssh key1:
    $ssh-keygen -t rsa -C "githubuser1@email.com"

优化Pod管理库文件的整洁

| Comments

在用pod管理库时,经常会遇到很多不需要的代码文件引入,甚至很多库只有很小的一部分是开发者需要的,怎么移除不用的文件呢?我的实现是:

在podfile里面实现如下:

pod.lock到底要不要加入git索引

| Comments

先上Cocoapods官方说明:

`Commit your Podfile.lock As a reminder, even if your policy is not to commit the Pods folder into your shared repository, you should always commit & push your Podfile.lock file.

Otherwise, it would break the whole logic explained above about pod install being able to lock the installed versions of your pods. `

NSNotFound思考

| Comments

  • 引子

    当我无意点开NSNotFound时,随意瞥了一眼,突然意识到其类型和之前在开发过程中的相关使用有些出入,由于之前并没有在意很多,查阅了苹果文档后,展开了关于NSNotFound的进一步思考。

AOP解耦APP统计

| Comments

在我们开发过程中,日志统计能够帮助我们更加详细的了解app功能使用情况,而日志数据条目多且零散,我们经常可以在已有的项目中看到四处出现的统计,经常在某个方法内部最后一行加上该条日志的统计。 这样不仅导致代码松散,与业务无关,对业务代码带来侵染,增加维护成本,更糟糕的是,如果其他项目复用该功能,这些与功能无关的代码还要一行行删掉,这种强耦合是完全不必要的,那通过什么方式可以统计到想获取的数据并且不影响业务逻辑呢。

切换根视图内存泄漏问题

| Comments

  最近在测试app性能时,发现了内存泄漏,跟踪发现问题出现在方法setRootViewController,这个方法的内存泄漏位置并不是启动app设置根视图的地方,是我在项目中用来切换根视图的代码:

1
2
3
4
5
  [UIView transitionWithView:self.window
              duration:0.6
               options:UIViewAnimationOptionTransitionFlipFromLeft
            animations:^{ self.window.rootViewController = mathEditorViewController; }
            completion:nil];