- (
BOOL
)application:(
UIApplication
*)application didFinishLaunchingWithOptions:(
NSDictionary
*)launchOptions
{
self
.
window
= [[
UIWindow
alloc
]
initWithFrame
:[
UIScreen
mainScreen
].
bounds
];
self
.
window
.
backgroundColor
= [
UIColor
whiteColor
];
CZMainViewController
*vc = [[
CZMainViewController
alloc
]
init
];
UINavigationController
*nav = [[
UINavigationController
alloc
]
initWithRootViewController
:vc];
//
以下两句等效
//
控制器的
view
在调用
getter
方法时,如果视图没有创建,会自动调用
loadView
方法
// vc.view.backgroundColor = [UIColor redColor];
// [[vc view] setBackgroundColor:[UIColor redColor]];
self
.
window
.
rootViewController
= nav;
//
让窗口成为主窗口并且可见,只有可见才需要将视图控制器的视图加载出来
[
self
.
window
makeKeyAndVisible
];
return
YES
;
}
#import
"CZMainViewController.h"
#import
"CZDetailViewController.h"
@interface
CZMainViewController
()
@property
(
nonatomic
,
weak
)
UIButton
*myButton;
@property
(
nonatomic
,
strong
)
NSMutableArray
*dataList;
@end
@implementation
CZMainViewController
- (
NSMutableArray
*)dataList
{
if
(!
_dataList
) {
_dataList
= [
NSMutableArray
array
];
}
return
_dataList
;
}
// NSObject
默认的实例化方法
- (
instancetype
)init
{
self
= [
super
init
];
if
(
self
) {
NSLog
(
@"%s"
, __func__);
}
return
self
;
}
//
视图控制器
“
默认
”
的实例化方法
- (
id
)initWithNibName:(
NSString
*)nibNameOrNil bundle:(
NSBundle
*)nibBundleOrNil
{
self
= [
super
initWithNibName
:nibNameOrNil
bundle
:nibBundleOrNil];
if
(
self
) {
NSLog
(
@"%s"
, __func__);
}
return
self
;
}
/**
*
用代码创建视图时使用,需要建立所有需要显示的子视图,等价于
Storyboard
*
*
在
iOS7
之后的开发中,需要注意的事情:
1>
在
loadView
方法中只是创建控件
2>
在
viewWillLayoutSubviews
设置控件的位置
这是因为自动布局的引入,每一次视图变化都会调用系统的自动布局系统
*/
- (
void
)loadView
{
NSLog
(
@"%s"
, __func__);
self
.
view
= [[
UIView
alloc
]
init
];
NSLog
(
@"%@"
,
NSStringFromCGRect
(
self
.
view
.
frame
));
UIButton
*btn = [
UIButton
buttonWithType
:
UIButtonTypeContactAdd
];
[
self
.
view
addSubview
:btn];
self
.
myButton
= btn;
[btn
addTarget
:
self
action
:
@selector
(click)
forControlEvents
:
UIControlEventTouchUpInside
];
}
- (
void
)click
{
CZDetailViewController
*vc = [[
CZDetailViewController
alloc
]
init
];
[
self
.
navigationController
pushViewController
:vc
animated
:
YES
];
}
/**
*
视图完成加载后被调用
*/
- (
void
)viewDidLoad
{
[
super
viewDidLoad
];
NSLog
(
@"%s"
, __func__);
NSLog
(
@"%@"
,
self
.
view
.
superview
);
}
/**
*
视图即将要显示到屏幕上
*/
- (
void
)viewWillAppear:(
BOOL
)animated
{
NSLog
(
@"%s"
, __func__);
LogFrame
(
self
.
view
);
NSLog
(
@"%@"
,
self
.
view
);
}
/**
*
视图完全显示在屏幕之上
*/
- (
void
)viewDidAppear:(
BOOL
)animated
{
NSLog
(
@"%s"
, __func__);
}
/**
*
重新布局子视图
*/
- (
void
)viewWillLayoutSubviews
{
NSLog
(
@"%s"
, __func__);
self
.
myButton
.
center
=
self
.
view
.
center
;
}
// layoutSubViews
方法是定义在
UIView
中的
/**
*
布局子视图完成
*/
- (
void
)viewDidLayoutSubviews
{
}
/**
*
将要离开界面
*/
- (
void
)viewWillDisappear:(
BOOL
)animated
{
NSLog
(
@"%s"
, __func__);
}
/**
*
已经消失
*/
- (
void
)viewDidDisappear:(
BOOL
)animated
{
NSLog
(
@"%s"
, __func__);
}
/**
*
接收到内存警告
*/
- (
void
)didReceiveMemoryWarning
{
//
父类方法,
"
有可能
"
将当前视图给销毁
[
super
didReceiveMemoryWarning
];
//
如果将视图销毁,将所有可以重新创建的资源销毁
//
将程序中的数据销毁,需要判断视图是否被销毁
//
使用
isViewLoaded
属性可以判断视图是否真的被加载,如果没有被加载,再销毁数据
if
(!
self
.
isViewLoaded
) {
self
.
dataList
=
nil
;
}
}
- (
void
)dealloc
{
NSLog
(
@"%s"
, __func__);
}
//在iOS5以后两个方法都已经淘汰
- (
void
)viewWillUnload
{
NSLog
(
@"%s"
, __func__);
[
super
viewWillUnload
];
}
- (
void
)viewDidUnload
{
NSLog
(
@"%s"
, __func__);
[
super
viewDidUnload
];
}