Hello,iPhone
先从一个图形界面的Demo开始,记录下一个iOS项目的创建和最简单功能的实现。
新建一个项目
当前最新Xcode版本为8.2.1,包含了Swift3以及iOS 10.2、watchOS 3.1、tvOS 10.1的SDK。
创建一个新的Single View的工程,开发语言选择Objective-C。
Xcode会为你生成下图中的文件。
应用的主入口
Supporting Files下面有个main.m文件,这就是主入口了。
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
它的主要功能就是调用AppDelegate类。
应用委托类以及app的生命周期
AppDelegate类是应用程序委托对象(要注意委托与代理是不同的),其继承的一系列方法在应用程序的不同阶段会被调用。所以,我们先来了解一下iOS应用的生命周期。
1、Not Running:应用没有运行或被系统终止。
2、Inactive:正在进入前台,但还不能接受事件处理的状态。
3、Active:通常意义的活动状态。
4、Background:后台状态(可以后台运行)。
5、Suspend:挂起,冻结状态,当系统内存不够时将其回收。
再来说说回调函数:
willFinishLaunchingWithOptions:—程序加载时首先要执行的函数
didFinishLaunchingWithOptions:—程序显示前的初始化工作
applicationDidBecomeActive:—进入前台并处于活动状态,此时可以做恢复UI的工作
applicationWillResignActive:—程序即将进入非活动状态,此时可以做保存UI的工作
applicationDidEnterBackground:—程序进入后台状态,可以保存数据和释放资源等工作。
applicationWillEnterForeground:—程序进入前台但非活动状态,此时可以恢复数据。
applicationWillTerminate:—程序被终止时调用,可以做释放资源等动作。但程序挂起后不会调用(This method is not called if your app is suspended)。
ViewController类、Main.storyboard与MVC模式
模型、视图、控制器模式:简单的说,就是控制器作为连接视图和模型的中介,视图上显示的内容取决于模型,模型的数据更改了,视图也会随之改变;视图上有用户的输入,模型也会相应改变数据。
ViewController继承自UIViewController,其是所有控制器的根类。
UIView是视图和控件的根类,storyboard是承载视图的地方。
模型可以用一个模型对象去封装,也可以直接做ViewController中处理。
Hello,iPhone!
做一个小demo:点击界面上一个按钮,界面上显示Hello,iPhone!
1、单击storyboard,在View设计界面上添加一个label和一个button(右下角对象库object library)。
2、通过辅助编辑器(Assistant editor),按住ctrl拖拽,将上述两个控件连接到ViewController中。
Label创建一个outlet
@property (weak, nonatomic) IBOutlet UILabel *HelloLabel;
Button创建一个action,直接在点击事件中改变Label的值
- (IBAction)onClick:(id)sender {
self.HelloLabel.text = @"Hello, iPhone!";
}
用源码方式打开Main.storyboard,可以找到我们拖拽操作的痕迹。
先来看看Label的连接这样的
<label fixedFrame="YES" text="菜鸟笔记" id="Fhn-S6-EU5">
<connections>
<outlet property="HelloLabel" destination="Fhn-S6-EU5" id="oP3-Bb-3tY"/>
</connections>
再来看看Button,connections的destination恰恰是ViewController的id
<button lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VKk-kX-z7o">
<rect key="frame" x="114" y="329" width="129" height="77"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Hello">
<color key="titleShadowColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="onClick:" destination="BYZ-38-t0r" eventType="touchUpInside" id="zNx-9T-eAY"/>
</connections>
</button>
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
运行起来吧,效果如下。
参考:
1、生命周期:https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW1
2、http://www.cnblogs.com/QianChia/p/5771082.html