IOS开发学习笔记(一)

概述:
iOS是苹果开发的手持设备操作系统(iPhone,iPad,iPod touch,iPad mini)。
基于UNIX,层次架构:核心操作系统层(Core OS)—> 核心服务层(Core Services)—>媒体层(Media)—>可触摸层(Cocoa Touch);
主要面对Cocoa Touch层;很多技术都是基于OC,底层很多框架是C开发的;Cocoa Touch层中的UIKit框架,为应用提供了各种可视化的组件如,窗口(UIWindow),视图(UIView)和按钮(UIButton);还提供了其他有用的框架,如拍照,照片,传感器,陀螺仪等硬件支持框架。
iOS 可直接与底层硬件通信(区别与android是没有虚拟机);系统底层,应用框架,应用软件都是用C\C++或OC写的,所有运行效率高。

同android ,一个包名对应一个唯一应用;
retina 视网膜屏幕,只有3.5和iphone4才有;
每一个应用程序都有属于自己的UIWindow;(IOS采用MVC模式)
UIView:视图。屏幕上可以看的看的东西都是UIView,如标签,文本,按钮(同android中的View),都是继承自UIView。
UIViewController(控制器) : 内部默认有个UIView视图;用于控制UIView这间的切换;管理UIView的生命周期;给UIView装配数据;处理UIView的事件处理;(类似android中的Activity)

++ 虚拟机 ++
shift+cmd+H(单次):退回桌面(home)
shift+cmd+H(两次):最近运行的软件并可关闭

运行原理:
入口 main.m中的main函数;再执行UIApplicationMain函数(先创建一个UIApplication实例(同android中的application,也是单例的);创建完成后马上开启一个消息循环(main loop)(故main方法永远没有返回),用来监听用户的操作;是应用程序的象征;再创建一个UIApplication的delegate对象,负责监听UIApplication的生命周期,当UIApplication生命周期发生改变时会向UIApplicationDelegate发送不同的消息);
运行过程:
第一次打开:didFinishLaunchingWithOptions(加载完毕)—> applicationDidBecomeActive(获取焦点);
当按home键时:applicationWillResignActive(失去焦点)—>
applicationDidEnterBackground(进入后台);
当再次点击应用图标重新进入应用时:applicationWillEnterForeground(进入前台)—> applicationDidBecomeActive(获取焦点);
main方法中返回:
//创建application和代理后,再开启一个消息循环。
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]))
参数:
第3个参数:指定UIApplication的类名(或子类),若为nil,默认就是UIApplication;
第4个参数:指定UIApplication代理的类名;

///应用加载完毕时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //初始化一个窗口,默认下一个程序对应一个程序,并加载页面
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    //初始化一个控制器,指定xib的名字;并设置到窗口的根控制器
    //相当于[self.window addSubview:self.viewController.view]
    self.window.rootViewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    //窗口默认不会显示,需要调用方法来显示
    //在众多窗口,会有一个主窗口(KeyWindow),只有主窗口才能跟用户交互
    //与self.window.hidden=NO区别在于能与用户进行交互
    [self.window makeKeyAndVisible];
    return YES;
}

将事件与按钮关联:
创建一个xib文件,插入文本和按钮;
用连线的方式关联view与viewController;
在当前ViewController对应的.h文件中声明文本控件和按钮的响应名

 //将文本控件当作类的成员变量,不需要自己管理内存,由View管理内部所有view的生命周期,故对UI控件可直接赋值,不需要retain
//用IBOutlet可显示在xib的列表中
@property (nonatomic,assign)IBOutlet UITextField *qq;
@property (nonatomic,assign)IBOutlet UITextField *pwd;
//定义一个按钮的方法,IBAction就是void,可关联到显示到xib文件右击列表
-(IBAction)login;

在xib中将控件和定义的控件变量名(事件方法)用连线的方式关联起来;

在.m中实现函数即可

收起键盘方法:哪个控件调起,则由哪个控件收回;(为防止控件被键盘覆盖,1.可修改控件的y值;2.使用scollView);

 -(void)login{
    NSString *qqtext = _qq.text;
    NSString *pwdtext = _pwd.text;
    NSLog(@"*** login ****,%@,%@",qqtext,pwdtext);
    //暂时理解,调出键盘的那个视图就是第一个响应者(FirstResponder)
    //1.代表不想当第一响应者,就会收起键盘;//也可遍历退出
    [_qq resignFirstResponder];
    [_pwd resignFirstResponder];
    //2.若第一响应者存在于self.view里面(包括所有子孙节点控件),就可以退出键盘;
    [self.view endEditing:YES];
}

— weak —:(类似于java中弱引用)相当于老版本的assign,指针变量仍然可以指向一个对象,但不属于对象的拥有者,一般ViewController对UI控件都是弱引用,View消失,则其中所有控件消失,不会引起野指针错误;仍然可以指向一个对象,但不属于对象的拥有者。即当对象被销毁的时候,这个weak指针也就自动指向nil(空指针)。

— strong —:(类似于java中强引用)相当于retain,具有持对象的能力;能够保持对象的生命,一个对象只要有strong指针指向它,那么它就不会被释放;相反的,如果一个没有一个strong指针指向它,那么它将会被自动释放。默认所有实例变量和局部变量都是Stong指针
保留连环(retain cycle):两个或更多对象以一种连环的方式相互拖持有,和个对象且个值为1或更大值的引用计数,因此它们的的指针永远不会释放,所有保留连环中的对象也从不会被销毁。为避免这种情况,在创建的时候须考虑好是谁创建谁,并一定使用weak关键字。即可使用所有者对象持有另一个对象,但另一个对象绝不会持有它的所有者。

从IOS5.0开始,使用storyboard来描述界面(但实际开发时多人开发容易冲突,使用xib可为单个viewController创建)
设置启动的主界面(main storyboard): 项目targets —> Deployment info—> Main Interface;
启动过程:
加载最主要的storyboard文件—>创建viewController —>创建控制器内部的View,并显示。
UIViewController与UIView的关系:UIViewController内部都有个UIView对象,就是管理的view;
新版本SDK开的新功能不一定能在低版本的ios版本上实现(同android);

++ UIView ++控件外部的(0,0)是控件父控件的左上角。直接在storyboard,直接拖动,在列表中的控件越靠后越在上。
常用属性:
- frame - 位置和尺寸(以父控件的左上角为原点(0,0)),宽高位置都能更改
- center- 中点 (以父控件的左上角为原点(0,0))也可用于改变位置
- bounds- 位置和尺寸(以自己的左上角为原点 (0,0)),只能改宽高,不能改位置
- transform - 形变属性(缩放,旋转)
- backgroundColor - 背景颜色
- tag - 标识
-tag-:在view下,设置控件的tag(类似于android的id),若多个按钮点击同一个方法,则可区别是哪个控件点击的。
- hidden - 设置是否要隐藏
- alpha - 透明度(0~1);
- opaque - 不透明度(0~1);
- userInteractionEnabled - 能否跟用户进行交互(YES 能交互)
- superView - 父控件
- subviews - 子控件
- contentMode - 内容显示的模式 拉伸自适应

[不能直接修改对象内部的结构体的属性值]

++ 设置代码模块 ++
左键长按代码块 到TextSetting的花括号中,并设置其名称和快捷键(不是设置键盘上的按键,是直接先快捷代码命令,如btn-set)
- UIButton 与UIImageView的区别:
UIButton有background属性,而UIImageView只有image属性。
[雷同于android中的ImageView和Button]
[Button有同android中TextView左右添加图片的属性]

UIImageView 继承自UIView就不能监听操作事件;
— 所有控件,只要继承UIControl都能监听屏幕操作事件;通过addTarget:<#(nullable id)#> action:<#(nonnull SEL)#> forControlEvents:<#(UIControlEvents)#>可添加事件监听;

若不用tag进行标识点击的是哪个按钮,可用字典文本的方式:新建一个字典plist,添加按钮文本和int型的value;将按钮上的文字设置成对应的字典中的key并设置其颜色为clear color;在点击事件中用按钮上的文字从字典中取出value再添加操作方法。
[*区域点击可考虑使用透明按钮]
— 两种方式加载图片:
[使用Product—Profile—Allocations 来进行内存使用监控]
[UIImage imageNamed@“”]该方法是系统方法(有缓存),加载图片后不会自动释放内在。图片先加载到内存中,使用后再放入缓存中,若没有释放,加载大量图片则会使内存撑爆。
[[UIImage alloc] initWithContentsOfFile:<#(nonnull NSString *)#>]无缓存,使用完成后会自动释放(但不是马上释放,会找个合适的时候释放),减小内存消耗;[使用该方法]

博客地址:IOS开发学习笔记(一)

你可能感兴趣的:(iOS,ios,ios开发,学习笔记,编程入门)