IOS开发入门之iOS编程开发快速入门指南
凌雪 2018-10-23 来源 :网络 阅读 811 评论 0

摘要:本文将带你了解IOS开发入门iOS编程开发快速入门指南,希望本文对大家学IOS有所帮助。

本文将带你了解IOS开发入门iOS编程开发快速入门指南,希望本文对大家学IOS有所帮助。


       

iOS编程开发快速入门指南。

1.   Objective-C语言入门

《Objective-C基础教程》,很好。这里整理下后面几章的学习笔记,方便复习。

2.   iOS开发入门

(1)   斯坦福白胡子老头iOS8视频

斯坦福大学公开课:iOS   8开发

这个公开课每个iOS版本都有,基本是用一个demo来讲解iOS开发,每个版本的demo都不一样,iOS7是用Objective-C的,我也是看完了才知道,但看iOS8的课程也是能同步用Objective-C完成demo的,两边的方法名称完全一样,只有语法的不同。

贴一下里面关于MVC模式的讲解

MVC模式

Model与View不能通信:Model与UI完全独立,UI组件都是generic的,需要Controller为其翻译并格式化Model的信息用于显示。   Controller->View:View里的UI组件以outlet形式存在于Controller中。   View->Controller:Controller自己注册target,告诉View当有指定的action(如按钮点击)发生时,发送这个action给我这个target。View通过delegate将should、will、did等动作的响应交给Controller处理。View不拥有其显示的数据,它是通过data   source(也算一种特殊的delegate)从Controller那里拿数据,而数据来自Model。   Model->Controller:Model将自己的属性变化通过广播发送给感兴趣的订阅者(一般是Controller),Notification   & KVO,然后Controller去Model中取新的数据。

(2)   《疯狂iOS讲义》

看随书的源码可以快速了解各种控件的使用,以及图形、动画相关知识。

3.   阅读与思考

Part   1 - 代码规范

(1)   代码风格

Round   1 - Raywenderlich.com官方代码风格指南 :]

The official   raywenderlich.com Objective-C style   guide.

中文翻译://blog.it985.com/10771.html

需要多注意里面一些细节的东西:

copy和strong的选择:把一个对象赋值给一个属性变量,当这个对象变化了,如果希望属性变量变化就使用strong属性,如果希望属性变量不跟着变化,就是用copy属性。   推荐使用代码提示中宏定义的NS_ENUM()枚举模块来创建,它可以提供更严谨的类型检测和代码补完功能。   私有变更应该在类的私有类别中,不需要加private等词语来进行修饰。   私有类别可以在命名为+Private.h的文件里提供。   init方法中返回值使用instancetype取代id作为返回。[原因]   单例必须线程安全。 :]

Round   2 - 总结自己的View层的组织规范

总结一套自己的View代码规范,日后需要慢慢完善。




   

<code><code><code>//   通用viewController/view代码结构

 

 #pragma mark - LifeCycle   Menthod

 - (void)viewDidLoad {

     [super viewDidLoad];

     [self   initView()];

     [self   initData()];

 }

 

 -   (void)viewWillAppear:(BOOL)animated   {

     [super viewWillAppear:animated];

 }

 

 - (void)didReceiveMemoryWarning {

     [super didReceiveMemoryWarning];

 }

 

 - (instancetype)init {}

 - (void)dealloc {}

 

 #pragma mark - Delegate   Menthod

 

 #pragma mark - Event   response

 - (void)xxxClick(){

 }

 

 #pragma mark - Public

 

 #pragma mark - Private

 - (void)initView{

     //DO   initView

     [self   initConstrains()];

 }

 

 - (void)initConstrains{

     //DO   initConstrains

 }

 

 - (void)initData{

     //DO   initData

 }

 

 #pragma mark - getter &&   setter

 

 // 1.   属性(特别是View)的初始化放在getter,在initView里面只addSubview。

 // 2. 关于第1点的lazy   initialization,对于需要判空的,线程不安全的以及自动优化相关的属性需要多加考虑。

 // 3.   initConstrains用于初始化约束,尽量使用makeConstraints,如果约束需要动态更新,重写updateViewConstraints或updateConstraints</code></code></code>

   

关于注释第2点:

Round   3 -   惰性初始化的优劣

Good   or bad practice? Initializing objects in   getter

lazy   initialization,对于需要判空的,线程不安全的以及自动优化相关的属性需要多加考虑,原因如上。

(2)   iOS工程的目录结构

Round   1 -   iOS项目工程及目录结构

iOS项目工程及目录结构

区分不同层次的通用组件。

General   Level, 最通用的组件,可以在不同项目里复用。 Project Level, 可以在该项目里复用。 Section Level,   可以在某个功能模块里复用。

Round 2 -   参考例子

iOS   项目的目录结构能看出你的开发经验

两个例子可以大概参考下。

Part   2 - 第三方库

(1)   iOS开发的包管理

CocoaPods

CocoaPods安装和使用教程

Carthage

Carthage   包管理工具,另一种敏捷轻快的 iOS & MAC   开发体验

CoaoaPods   是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库。然后 CocoaPods 就会进行下载,集成,然后修改或者创建我们项目的   workspace   文件,这一系列整体操作。

相比之下,Carthage   就要轻量很多,它也会一个叫做 Cartfile 描述文件,但 Carthage 不会对我们的项目结构进行任何修改,更不多创建   workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后使用 xcodebuild 构建成 framework   文件。然后由我们自己将这些库集成到项目中。Carthage   使用的是一种非侵入性的哲学。

(2)   常用的第三方库

Masonry  

Masonry是一个轻量级的布局框架   拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X Masonry介绍与使用实践  

AFNetworking

AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac   os 网络进行扩展的高性能框架 IOS 网络请求之   AFNetWorking 3.x   使用

FMDB

FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API   [iOS]数据库第三方框架FMDB详细讲解

libextobjc

libextobjc一个提供语言级别各种小功能的库

FLEX   应用内调试神器

SDWebImage   图片加载框架

Reachability   检测手机网络状态

MJRefresh   下拉刷新,上拉加载更多组件

Toast   Toast

Part   3 - 技巧篇

(1)   自动布局

Round   1 - UIScrollview与Autolayout

UIScrollview与Autolayout

scrollView比较特殊,因为它有个contentSize的属性。ScrollView的contentSize的大小是由其subview的constraints来决定的。

为了正常显示,使用一个单一的containerView占满全部,然后把所有的subview添加到containerView中。(亲测)

Round   2 -   约束代码何处安放

Where   should I be setting autolayout constraints when creating views   programmatically?

How   to Use updateConstraints?  

updateViewConstraints与updateConstraints可以在需要更新大量约束时重写,对于只初始化一次而不需要修改的约束,写到类似于viewDidLoad的方法中比较好。

Round 3 -   一个坑

The   Mystery of the   +requiresConstraintBasedLayout

基于约束的布局是懒触发的,只有在添加了约束的情况下,系统才会自动调用 -updateConstraints   方法,如果把所有的约束放在 updateConstraints中,那么系统将会不知道你的布局方式是基于约束的,所以重写+requiresConstraintBasedLayout   返回YES就是明确告诉系统:虽然我之前没有添加约束,但我确实是基于约束的布局!这样可以保证系统一定会调用 -updateConstraints 方法   从而正确添加约束。

(2)   weakSelf

透彻理解block中weakSelf和strongSelf


   

<code><code><code>__weak   __typeof(self)weakSelf = self;

[self.context performBlock:^{

    __strong __typeof(weakSelf)strongSelf =   weakSelf;

    [strongSelf   doSomething];

}];</code></code></code>

   

当block直接或间接的被self持有时,需要weakSelf。其他情况下加weakSelf也没什么问题。

使用libextobjc库可以简化下代码:


   

<code><code><code>#import "EXTScope.h"

 

@weakify(self)

[self.context   performBlock:^{

    @strongify(self)

    [self   doSomething];

}];</code></code></code>

   

(3)   iOS应用数据存储

iOS本地数据存取,看这里就够了

XML属性列表(plist)归档   Preference(偏好设置) NSKeyedArchiver归档(NSCoding)NSKeyedArchiver–对象归档 SQLite3 Core   Data


   


 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程