iOS开发日常笔记01
为什么有initWithCoder还要awakeFromNib?
awakeFromNib相较于initWithCoder的优势是:当awakeFromNib执行的时候,各种IBOutlet也都连接好了;而initWithCoder调用的时候,虽然子视图已经被添加到视图层级中,但是还没有引用。如果你是基于xib或storyboard创建的控件,那么你可能需要对IBOutlet连接的子控件进行初始化工作,这种情况下,你只能在awakeFromNib里进行处理。同时xib或storyboard对灵活性是有打折的,因为它们创建的代码无法被继承,所以当你选择用xib或storyboard来实现一个控件的时候,你已经不需要对灵活性有很高的要求了,唯一要做的是要保证用户一定是通过xib创建的此控件,否则可能是一个空的视图,可以在initWithFrame里放置一个断言或者异常来通知控件的用户。
layoutSubviews作用
layoutSubviews是对subviews重新布局。比如,我们想更新子视图的位置的时候,可以通过调用layoutSubviews方法,即可以实现对子视图重新布局。
layoutSubviews默认是不做任何事情的,用到的时候,需要在子类进行重写。
layoutSubviews调用场景
①、直接调用setLayoutSubviews。
②、addSubview的时候触发layoutSubviews。
③、当view的frame发生改变的时候触发layoutSubviews。
④、第一次滑动UIScrollView的时候触发layoutSubviews。
⑤、旋转Screen会触发父UIView上的layoutSubviews事件。
⑥、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
注意:
init初始化不会触发layoutSubviews,但是使用initWithFrame进行初始化时,当rect的值不为CGRectZero时,也会触发。
其他
①、- (void)layoutSubviews;
这个方法,默认没有做任何事情,需要子类进行重写;
②、- (void)setNeedsLayout;
标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用;
③、- (void)layoutIfNeeded;
如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)。
如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局。在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用[view layoutIfNeeded]
④、reloadData会调用layoutSubviews方法吗?
[cell setNeedsLayout]会调用cell的layoutSubviews reloadData只是刷新列表而已
支付宝架构概况
整个客户端架构总共分成四层:业务层、服务层、组件层、框架层。
业务层:只需专注于业务逻辑与界面的实现,当需要调用如支付这样的通用能力时,研发同学直接使用下层提供的服务能力,不需自己开发,如此能够保证核心能力有收口,方便监控。
服务层:常用模块,如登录、支付、营销等,它们不仅自己是业务,也向其他业务提供自己的服务,我们将此类模块归类到服务层。
组件层:这一层提供的是客户端通用能力,如安全、网络、多媒体、存储这些,它们提供稳定的接口给上层使用者,同时不断优化自身内部的性能和稳定性,作为客户端的基石,它们至关重要。
框架层:最为关键的部分,包括容器、微应用、服务框架以及 Pipeline,客户端的微应用化、启动管理都依赖框架层的运作。
@synthesize和@dynamic
@property有两个对应的词,一个是 @synthesize,一个是 @dynamic。如果 @synthesize和 @dynamic都没写,那么默认的就是@syntheszie var = _var;
@synthesize 的语义是如果你没有手动实现 setter 方法和 getter 方法,那么编译器会自动为你加上这两个方法。
@dynamic 告诉编译器:属性的 setter 与 getter 方法由用户自己实现,不自动生成。(当然对于 readonly 的属性只需提供 getter 即可)。假如一个属性被声明为 @dynamic var,然后你没有提供 @setter方法和 @getter 方法,编译的时候没问题,但是当程序运行到 instance.var = someVar,由于缺 setter 方法会导致程序崩溃;或者当运行到 someVar = var 时,由于缺 getter 方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定。
isKindOfClass和isMemberOfClass的区别
-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例
-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例
static关键字
static关键字修饰局部变量:
当static关键字修饰局部变量时,只会初始化一次且在程序中只有一份内存;
关键字static不可以改变局部变量的作用域,但可延长局部变量的生命周期(直到程序结束才销毁)。
static关键字修饰全局变量:
当static关键字修饰全局变量时,作用域仅限于当前文件,外部类是不可以访问到该全局变量的(即使在外部使用extern关键字也无法访问)。
extern关键字:
想要访问全局变量可以使用extern关键字(全局变量定义不能有static修饰)。
全局变量是不安全的,因为它可能会被外部修改,所以在定义全局变量时推荐使用static关键字修饰。
控制屏幕保持常亮状态
[UIApplication sharedApplication].idleTimerDisabled = YES;
UITableViewCell点击时子视图背景透明的解决方法
产生这种情况的主要原因是由于UITableViewCell的选中风格所致。如果开发者不进行设置,UITableViewCell中的selectionStyle属性默认风格为UITableViewCellSelectionStyleBlue。这时,如果用户点击或者选中了某个Cell,系统会自动将其上子视图的背景色改成透明以便统一Cell的整体背景颜色。开发者可以将其设置为UITableViewCellSelectionStyleNone枚举值来不适用任何Cell的选中风格。
如果需要使用Cell的选中风格同时又不想让Cell上的子视图收到影响,我们可以继承UITableViewCell后在其中覆写父类的如下两个方法,在这些方法中重新设置子视图的背景色:
//这个方法在Cell被选中或者被取消选中时调用
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
self.testLabel.backgroundColor = [UIColor orangeColor];
} //这个方法在用户按住Cell时被调用
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
[super setHighlighted:highlighted animated:animated];
self.testLabel.backgroundColor = [UIColor orangeColor];
}
iOS开发日常笔记01的更多相关文章
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- ios开发学习笔记(1)
objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...
- IOS开发复习笔记(1)-OC基础知识
在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下: 1.命名约定 对象类型和名称一致,以免混淆 ...
- iOS开发学习笔记
1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...
- ios开发学习笔记(这里一定有你想要的东西,全部免费)
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
- iOS开发零碎笔记
Mac常用操作 全屏截图:同时按住键盘左下方的command和shift ,然后点击键盘上方的数字键3,便可对整个屏幕截图,截图会自动保存在桌面:任意部分截图:同时按住键盘左下方的ommand和s ...
- IOS开发学习笔记017-第一个IOS应用
第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...
- ios开发错误笔记
今天的奇葩错误,最后解决方式是删除了手机上面的快捷方式,然后再clean,然后再重启了xcode.无语了,xcode也经常出些奇葩问题,真无语啊. ios技术交流群:378501081..期待你加入. ...
- (ios开发学习笔记一)ios项目文件结构
转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...
随机推荐
- bzoj1396识别子串(SAM+线段树)
复习SAM板子啦!考前刷水有益身心健康当然这不是板子题/水题…… 很容易发现只在i位置出现的串一定是个前缀串.那么对答案的贡献分成两部分:一部分是len[x]-fa~len[x]的这部分贡献会是r-l ...
- redhat下libreoffice 的安装
1.第一次安装libreoffic时是用网络yum源安装的,但是装好之后不能用,找了好久没有找出问题,后来从官网下载安装包后安装就可以了. 下载地址:https://zh-cn.libreoffice ...
- 史上最强maven配置详情
史上最强maven配置详情 优点 对第三方依赖库进行了统一的版本管理 统一了构建过程 统一了项目的目录结构 构建 清理 : mvn clear 编译 : mvn compile 测试 : mvn te ...
- binary-heap(二叉堆)原理及C++代码实现
二叉堆可以看做一个近似的完全二叉树,所以一般用数组来组织. 二叉堆可以分为两种形式:最大堆和最小堆.最大堆顾名思义,它的每个结点的值不能超过其父结点的值,因此堆中最大元素存放在根结点中.最小堆的组织方 ...
- 三十五、lamp经典组合搭建
一.安装mysql数据库 1.1 创建组和用户: 1)groupadd mysql 2)useradd mysql -g mysql -M -s /sbin/nologin 3)config ...
- centos7 ModuleNotFoundError: No module named 'users'
centos7下运行django项目时ModuleNotFoundError: No module named 'users' 由于我的项目目录是下面这样: 因为找不到users的路径 所以在mana ...
- maxquant|
使用maxquant 设定修饰: 设定打分值: 设定有标定量方法:iBAQ,虽然是无标定量方法,但是设定该值后也会有相应有标定量方法的iBAQ值. 根据计算机性能设定线程数: 设定酶切位点 最后生成文 ...
- particlesJS is not defined
插件或者js文件在引入时需要注意引入顺序,每次都找很久的错误 一般引入min.js就可以,min.js意思就是压缩的js文件 引入时应该先加入min类的文件在引入配置文件 比如particles插件, ...
- [LC] 142. Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. To r ...
- 吴裕雄--天生自然python学习笔记:python爬虫与网页分析
我们所抓取的网页源代码一般都是 HTML 格式的文件,只要研究明白 HTML 中 的标签( Tag )结构,就很容易进行解析并取得所需数据 . HTML 网页结构 HTML 网 页是由许多标签( Ta ...