某学姐

Android Female Developer,Technology Fan,Reader。

iOS基础入门(一)

2016-05-08 | Comments

一、概述

正式开始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代码编辑处,编辑代码即可。具体如下图所示:

图1

图2

图3

(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模式。这样耦合会比较少,结构也会很清晰。

如下所示:

图4

学姐在实际操作过程中,尝试了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中都能看到文件夹了,再也不用担心所有业务类堆一起了。

如下分别为效果图:

图6

图7

下面小结下:

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为辅容器

如下图所示:

图5

入口程序为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***.m2个文件组成。
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专栏

学姐的IT专栏

本文原文发自 某学姐, 转载请保留出处, 谢谢.

Comments