首页 > 系统 > iOS > 正文

IOS开发学习笔记(一)

2019-11-07 23:25:03
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表