热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ObjectiveC文章推荐

针对常见的面试问题,有些文章写得很不错,记录下来,经常看看。多线程这是最重要的一块,也是相对比较难的一块。从实际使用来看,NSOperatio

针对常见的面试问题,有些文章写得很不错,记录下来,经常看看。

多线程

  • 这是最重要的一块,也是相对比较难的一块。从实际使用来看,NSOperation是最重要的,其次GCD也是要掌握的;另外两种pThread和NSThread知道就好。
  • 队列分串行并行两种;
    执行分同步异步两种;
  • 死锁的情况,一种是相互等待,比如相互依赖,NSOperation可能会出现这种情况;另外一种是主线程自己等自己;
  • GCD栅栏,dispatch_barrier_async,可以保证前后两部分的时序,要充分运用。
  • 单例dispatch_once
  • 延时执行dispatch_after
  • dispatch_group_t可以起到Promise.all()的作用,可以切换到主线程
  • NSOperation用maxCOncurrentOperationCount=1实现串行队列
  • NSOperation可以暂停和取消
  • NSOperation的操作依赖可以实现串行顺序
  • 一个线程对应一个RunLoop对象
  • 定时器是否工作跟RunLoop对象的模式有关
  • 用RunLoop实现常驻内存线程
  • 用图片默认模式延迟显示,防止图片卡顿
  • 实现线程安全的数组,是多线程运用的一个典型案例
    iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用
    iOS多线程:『GCD』详尽总结
    iOS多线程:『RunLoop』详尽总结
    关于NSMutableArray线程安全的思考和实现
    iOS实录12:NSMutableArray使用中忽视的问题
    IOS多线程同步问题
    iOS多线程到底不安全在哪里?

内存管理

  • 从MRC到ARC,到block,到引用循环,到属性修饰关键字等等,内存管理一直是比较重要的话题。下面这篇文章的总结很好,很有用:
    iOS经典面试题总结–内存管理

  • 平时怎么使用XCode查内存相关的问题?参考下面这篇文章
    WWDC 2018:iOS 内存深入研究

  • 了解关于UIImage方面的知识:
    WWDC2018 图像最佳实践
    WWDC心得与延伸:iOS图形性能

  • 关注内存是为了关注性能,怎样进行性能调优:
    iOS 性能调优,成为一名合格iOS程序员必须掌握的技能
    iOS 性能优化总结
    iOS 性能优化探索
    iOS的离屏渲染

  • 如果内存处理不当,会引起崩溃,因而了解一下崩溃也是有好处的:
    WWDC 2018:理解崩溃以及崩溃日志
    主题: 如何捕捉发布版本ipa的崩溃, 并定位崩溃代码
    iOS崩溃crash大解析

Runtime

RuntimeSummary

UIScrollView

首页轮播广告,就是常见的一种应用。

UITableView

UITableView在iOS中已经成了一种现象级的内容,需要重点关注。

  • 表格的高度计算是非常影响性能的一个方面,目前有一个star很高的第三方库:
    优化UITableViewCell高度计算的那些事

UICollectionView

实现垂直方向的单列表来说,使用UITableView足以;若是需要构建横向滑动列表、gridView等直线型布局,则使用UICollectionView+UICollectionViewFlowLayout搭建最合适;更复杂的布局,则可以使用UICollectionView+自定义Layout来实现。

  • 这一篇是简单使用,一般情况下,够用了。
    UICollectionView之介绍使用篇

  • 这一篇讲到了自定义Layout实现比较炫酷的效果。
    iOS之流布局UICollectionView全系列教程

组件化

  • 为了应对一个公司支持N多APP的情况,增加代码复用,引入组件化的思路。组件一般有两种,一种是业务无关的功能型组件,比如网络、图片等;另外一种是业务组件,比如登录、注册、扫码等等。

  • 组件化的第1步,往往是独立出专门的文件夹,在新工程中copy一下就可以复用了。
    组件化的第2步,常常是参照开源社区的做法,做成私有的CocoaPods库。

架构

  • 这篇文章讲了基本概念,也有实例代码:
    杂谈: MVC/MVP/MVVM
  • 这里讲UIViewController是场景Scene,不是真正的C层。可以根据业务,提供合适的xxxHelper作为真正的C,实现真正的MVC。
  • MVP也是可以考虑的一种方式,UIViewController当做场景Scene,引入一个额外的P起到C的作用,隔离V和M,叫做MVCP比较合适。
  • MVVM可以看作增强版的MVP。VM起到了P的作用,隔离了V和M。并且在VM和V之间引入了双向绑定,自动更新V,减少了代码。至于双向绑定采用KVO还是RAC,可以根据实际情况选择。
  • 这几篇文章讲了基本概念,示意图很清晰,并且还进行了前后端框架应用的对比:
    谈谈 MVX 中的 Model
    谈谈 MVX 中的 View
    谈谈 MVX 中的 Controller
    浅谈 MVC、MVP 和 MVVM 架构模式
  • 将业务逻辑移到Model(参考redux的state),自定义视图替代根视图,给Controller减负
  • 增加P对象,解耦M和V
  • 不建议用独立对象做为UITableView的代理
  • 这篇比较简洁,MVC-》MVP-》MVVM,一路进化而来,推荐用MVVM:
    浅谈MVC、MVP和MVVM,以及iOS中的MVC

  • 这几篇从概念到实例,介绍了MVVM如何落地:
    iOS 关于MVC和MVVM设计模式的那些事
    iOS 关于MVVM Without ReactiveCocoa设计模式的那些事
    iOS 关于MVVM With ReactiveCocoa设计模式的那些事

从目前阅读这三篇文章之后看,可以考虑引入ViewModel,作用相当于Presenter,隔离View和Model。RAC改变太多,代码很陌生,暂时不引入。可以考虑用KVOController 作为属性观察,让View响应ViewModel的变化。Swift就不需要了,有原生支持的属性观察方法。

  • Trip-to-iOS-Design-Patterns

  • JLRoutes

  • CTMediator

  • DecouplingKit

UML

在Java中用得比较多,Objective-C中不是很常见。其中的类图还是要了解一下,能看懂比较有利于沟通。
六种关系是理解的基础,两两对应起来,方便记忆
泛化,实现;
依赖,关联;
聚合,组合;
UML的六种关系
UML元素和UML关系图符号简介
软件设计之UML—UML中的六大关系


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 在开发中,有时候一个业务上要求的原子操作不仅仅包括数据库,还可能涉及外部接口或者消息队列。此时,传统的数据库事务无法满足需求。本文介绍了Java中如何利用java.lang.Runtime.addShutdownHook方法来保证业务线程的完整性。通过添加钩子,在程序退出时触发钩子,可以执行一些操作,如循环检查某个线程的状态,直到业务线程正常退出,再结束钩子程序。例子程序展示了如何利用钩子来保证业务线程的完整性。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • Java编程思想一书中第21章并发中关于线程间协作的一节中有个关于汽车打蜡与抛光的小例子(原书的704页)。这个例子主要展示的是两个线程如何通过wait ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
author-avatar
厄祖EQ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有