转载

iOS基础入门(一)

一、概述

正式开始iOS学习计划了,还是一如既往的忙,所以都是周末搞了。

周六花了一天时间学习了下iOS,目前感觉良好,这应该归功于某位不知名的童鞋。

这个是他的BLOG http://www.samirchen.com/

下文之所以不按照 ** 入门的套路来写,是我觉得上面这位童鞋已经写得很好了,思路非常清晰,我很难超越,再去写就只能抄袭了。

但是目录结构还是借鉴过来了,在此说明下。

二、实践篇

1.创建一个iOS项目

1.1 安装Xcode

Xcode下载:

(1)AppStore下载

(2)apple.developer.com官网下载

安装点击下载好的Xcode,按提示操作即可。

1.2 创建一个空项目

1.3 添加一个交互事件

以最简单的场景为例,创建一个UIButton,点击UIButton弹出一个提示框。

实现方式有两种:

(1)storyboard方式拖一个UIButton控件到storyboard,并双指轻按弹出提示框,选中Touch Up Inside点击事件,将其拖到ViewController.m代码编辑处,编辑代码即可。具体如下图所示:

iOS基础入门(一)

iOS基础入门(一)

iOS基础入门(一)

(2)自定义View方式纯代码编写。

参考: http://www.samirchen.com/ios-start-1/

2.管理第三方库

iOS中是通过CocoaPods管理库依赖的。

2.1 安装CocoaPods

由于 CocoaPods 需要通过 rubygem 命令下载安装,而 ruby 的软件源 https://rubygems.org 因为使用的是亚马逊的云服务,所以被墙了,可以切换成taobao的源进行安装。

sudo gem sources -a https://ruby.taobao.org/ sudo gem sources -r https://rubygems.org/ sudo gem sources -l  sudo gem update sudo gem install -n /usr/local/bin cocoapods -v 0.39 pod setup pod --version 

2.2 在当前项目中引入CocoaPods和第三方库

这里我们使用 SVProgressHUDMasonry

SVProgressHUD 是一个提示框,类似于 Android 中的 ProgressDialog

Masonry 是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局

在项目根目录下创建Podfile文件,在文件中添加如下配置:

source 'https://github.com/CocoaPods/Specs.git' platform :ios, "8.0" target "iOSStartDemo" do     pod 'SVProgressHUD', '1.1.3'     pod 'Masonry', '0.6.3' end 

然后通过如下命令,安装第三方依赖库:

pod install 

安装成功后,在项目根目录下会多出几个文件,我们打开.xcworkspace文件,重新启动工作空间,继续后续操作。

2.3 在代码中使用第三方库

参考: http://www.samirchen.com/ios-start-2/

3.实现一个多页面App

3.1 项目目录结构调整

为啥初学iOS就要考虑目录结构调整呢?

嗯,初学iOS,并不代表基础为0,之前的编码经验是可以灵活借鉴到新技术的学习中来的。

iOS官方使用MVC架构,和 Android 类似。通常一个完整项目由基础功能模块、基础业务模块、各业务模块和资源文件组成,不同业务模块放到不同的包下面,每个业务模块都使用MVC模式。这样耦合会比较少,结构也会很清晰。

如下所示:

iOS基础入门(一)

学姐在实际操作过程中,尝试了2种方式来调整目录结构:

(1)New Group方式

在Xcode中双指轻按项目主目录,弹出选项框,选中New Group,依次创建业务文件夹。

这种方式能够运行很OK,但是当我去Finder中去查找时,并没有找到我创建的文件夹,所有的文件都在一个目录下,还以为哪里出问题了。对照了下参考的demo,别人的明明就是有文件夹的啊,于是我Google了下,开始尝试方式(2)

(2)创建实体文件夹方式

直接在Finder对应位置创建相应的实体文件夹。

这时在Xcode中能看到对应的文件夹,但是当我开始run时,提示找不到 **ViewController.h ,这个类明明是存在的,检查了好几遍。我比较了下方式(2)和方式(1)的不同,发现方式(2)的文件夹是蓝色的,方式(1)的文件夹是黄色的。捣腾半天,在研究怎么把蓝色变黄,于是又开始Google了,最终找到方法了,直接将Finder中的实体文件夹拖到Xcode中对应位置,然后删掉Xcode中的蓝色文件夹就行了。

运行结果符合预期,而且在Xcode和Finder中都能看到文件夹了,再也不用担心所有业务类堆一起了。

如下分别为效果图:

iOS基础入门(一)

iOS基础入门(一)

下面小结下:

Android 中有一个很重要的概念: package ,不同业务模块通常放到不同package中的。对某个类的引用,也需要导入这个类所在的包,或者是类名前带上包名。

然而 iOS 中对某个类的引用直接import这个类的头文件即可,如 import **ViewController.h ,并没有包名的说法。

Group 有点类似于 package ,但它只是一个分组,是 Xcode 环境下的虚拟文件夹,并不实际在Finder中能看到。

Finder中创建的实体文件夹,Xcode是不认的。Xcode只认虚拟文件夹,但是通过将Finder中的实体文件夹拖到Xcode对应位置,就能得到虚拟文件夹了,这时候虚拟文件夹和实体文件夹就对应上了。

3.2 Tab式 + Navigation式的项目架构实现

以下文字为摘抄:

常见的页面容器有 UITabBarControllerUINavigationController

UITabBarController 是通过 数组 的形式管理容器内的所有 UIViewController

UINavigationController 是通过栈的形式管理容器内所有 UIViewController

这两种容器可以嵌套使用,通常 UITabBarController 为主容器, UINavigationController 为辅容器

如下图所示:

iOS基础入门(一)

入口程序为 MXJAppDelegate ,类似于 Android 中的 Application

我又仔细看了下,主目录下有个 main.h 文件,Supporting Files目录下有个 main.m 文件,这两个文件中都调用了 MXJAppDelegate 。嗯,这其实也证实iOS开发语言 Objective-C 是基于 C 语言的,都是以 main 为程序的真正入口。

3.3 使用UITableView

UITableView 是一个列表View,类似于 Android 中的 ListViewRecyclerView

参考: http://www.samirchen.com/ios-start-3/

三、总结

1.每个类都由 ***.h***.m 2个文件组成。

Android 中只有 .java 文件

2. main.m 为程序的真正入口,它调用的 AppDelegateObjective-C 代码入口。

对应于 Android 中的 Application

3.创建一个View的方式有两种: storyboard方式代码自定义方式

对应于 Androud 中的 .xml布局代码自定义方式

4.iOS中的库依赖使用的是 CocoaPods

Android中库依赖使用 gradle

5.iOS中没有 package ,只有 Group 概念, Group 是Xcode下的虚拟文件夹,不是实体文件夹。通过在Finder中创建实体文件夹,然后拖到Xcode中对应目录的方法,可以将实体文件夹和虚拟文件夹对应上

Android 中有 package 概念,对类的引用需要 import package

6.初步认识了下 iOS 中几个常用控件:

第三方: SVProgressHUDMasonry

(1) SVProgressHUD 是一个提示框,类似于 Android 中的 ProgressDialog

(2) Masonry 是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局

原生: UIButton , UITableView , UITabBarController , UINavigationController , UIViewController

(1) UIButton 按钮,类似于Android中的 Button

(2) UITableView 列表View,类似于Android中的 ListViewRecyclerView

(3) UITabBarController 管理tab的一个控制器

(4) UINavigationController 管理界面导航的控制器,也可以理解为界面路由控制?(个人理解)

(5) UIViewController 管理View的控制器,基础类,它的上级可以是 UITabBarControllerUINavigationController 等(个人理解)

四、致读者

讲下自己对学习一门新技术的看法,以及个人学习方法:

(1)前提条件:

由于有 Android 开发经验,所以学习新技术iOS时,不是且不能认为自己是0基础

Android 开发者学习 iOS 只是拓宽知识广度,不应该以 iOS 开发者的同等标准要求自己,会简单的iOS App开发,知道一些基本知识即可

(2)学习方法:

边实践边学习。

因为已经有 Android 开发经验,第一步应该是搭建环境,能跑起来一个 Hello World 程序

接下来照着入门教程,做一个简单的小功能,照着例子敲一边即可,熟悉下 Xcode 使用,初步感受下 iOS 程序的结构,初步了解下几个常见的控件。

再接下来,我觉得可以在Github上找个难度适中的 iOS 项目,边学习 Objective-C 语法和 iOS 中的各种控件了

以上对于其他新技术的学习,应该也有一定程度的指导意义

以上仅代表个人意见,没有绝对性和权威性,欢迎各位吐槽

demo

参考文档

http://www.samirchen.com/ios-index/ http://www.cocoachina.com/ios/20160301/15328.html

欢迎大家关注我的公众号:学姐的IT专栏

iOS基础入门(一)

原文  http://mouxuejie.com/blog/2016-05-08/ios-learn-1/
正文到此结束
Loading...