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开发学习笔记(一)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容