AppDelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property(retain, nonatomic)NSMutableArray *array;
@property(copy, nonatomic)NSString *str;
- (void)setStr:(NSString *)str;
@end
AppDelegate.m
这里写#import "AppDelegate.h"
// 延展 主要写属性的地方
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建一个窗口, 让它的尺寸和屏幕尺寸等大
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// 修改窗口的背景颜色
self.window.backgroundColor = [UIColor whiteColor];
// 让当前的窗口可见, 并成为主窗口
[self.window makeKeyAndVisible];
// 释放
[_window release];
// UIView
// 第一步: 创建
// 先看继承关系, 再找这个类有没有自己的初始化方法
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
// 第二步: 设置背景颜色, 没有设置的话默认是透明的
view.backgroundColor = [UIColor cyanColor];
// 第三步: 把视图在window上显示出来
[self.window addSubview:view];
// 父视图通过一个数组来管理身上的子视图
// 第四步: 释放
NSLog(@"%ld", view.retainCount);
// 因为父视图把子视图放到数组来进行管理, 数组会对对象的引用计数+1, 所以我们可以在添加视图之后把对象释放掉, 抵消alloc所产生的+1
[view release];
// view.backgroundColor = [UIColor blueColor];
// 再创建两个view
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(150, 150, 100, 100)];
view1.backgroundColor = [UIColor blueColor];
[self.window addSubview:view1];
[view1 release];
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)];
view2.backgroundColor = [UIColor purpleColor];
[self.window addSubview:view2];
[view2 release];
// 1. 一个视图有一个父视图, 但是可以有多个子视图
// 3. 子视图的坐标点时相对父视图的0,0位置
// 通过父视图来管理子视图
// 父视图可以管理层级关系
[self.window bringSubviewToFront:view];
[self.window sendSubviewToBack:view];
// 透明度, 从0到1, 默认是1
view2.alpha = 0.2;
// 隐藏, 默认NO
view.hidden = YES;
// 父视图
NSLog(@"%@", view1.superview);
// 子视图
NSLog(@"%@", view.subviews);
// 默认都是0
view1.tag = 100;
UIView *tempView = [self.window viewWithTag:100];
NSLog(@"%p %p", view1, tempView);
// NSTimer
return YES;
}
两种setter方法
//- (void)setStr:(NSString *)str {
if (str != _str) {
[_str release];
_str = [str copy];
}
// [str retain];
// [_str release];
// _str = str;
//}
- (void)dealloc {
// 对属性进行内存管理
[_window release];
[super dealloc];
}
代码片