IOS学习笔记 -- 基础MVC初学习
1.
@property的参数说明
ARC是苹果为了简化程序员对内存的管理,推出的一套内存管理机制
使用ARC机制,对象的申请和释放工作会在运行时,由编译器自动在代码中添加retain和release
1>
strong:强指针引用的对象,在生命周期内不会被系统释放
在OC中,对象默认都是强指针
2>
weak:弱指针引用的对象,系统会立即释放
弱指针可以指向其他已经被强指针引用的对象
@property参数使用小结:
1> 控件用weak
2> 属性对象用strong
3>
非对象类型用assign
4> 字符串NSString用copy
提示:在纯手码实现界面布局时,如果通过懒加载处理界面控件,需要使用strong强指针
2. 关于九宫格布局的计算方法
能够公用的常量尽量给抽取出来,以便增加九宫格布局的灵活性,尽量保证做到:
1>
根据要显示的数据自动调整小格子的位置和数量
2> 一旦调整了要显示的列数,仅需要修改少量的数值即可做到
3. 关于UIButton的一些补充
3.1
按钮的类型
在iOS的控件中,只有UIButton提供了类方法,可以在实例化按钮时指定按钮的不同类型。
UIButtonTypeCustom和[[UIButton
alloc] init]是等价的
3.2 修改按钮字体
在UIButton中有两个对象属性是定义了readonly的:
1>
titleLabel
2>
imageView
@property中readonly表示不允许修改这两个对象属性的指针地址,但是可以修改其内部的属性
注意:由于按钮的字体大小是所有状态共用的,因此可以通过
button.titleLabel.font= [UIFont
systemFontOfSize:14.0];
修改按钮标签文本的字体大小
但是不能使用 ( button.titleLabel.text = @"下载"; ) 代码设置按钮标签的文本内容,因为按钮标签的文本内容是跟按钮的状态相关的,按钮的默认和高亮状态的文字可能是不同的。
4. 块动画
4.1 首尾式动画
如果只是修改控件的属性,使用首尾式动画还是比较方便的,但是如果需要在动画完成后做后续处理,就不是那么方便了
[UIView
beginAnimations:nil context:nil];
[UIView setAnimationDuration:动画持续时间];
//
修改属性的动画代码
// ......
[UIView commitAnimations];
4.2
块动画
块动画相对来说比较灵活,尤为重要的是能够将动画相关的代码编写在一起,便于代码的阅读和理解,在IOS中基本都使用块动画
[UIView
animateWithDuration:2.0 animations:^{
// 修改控件属性动画
label.alpha =
0.0;
} completion:^(BOOL finished) {
// 删除控件
[label
removeFromSuperview];
}];
5. 字典转模型
5.1 字典转模型的好处:
1> 降低代码的耦合度
2>
所有字典转模型部分的代码统一集中在一处处理,降低代码出错的几率
3> 在程序中直接使用模型的属性操作,提高编码效率
模型应该提供一个可以传入字典参数的构造方法
- (instancetype)initWithDict:(NSDictionary
*)dict;
+ (instancetype)xxxWithDict:(NSDictionary *)dict;
5.2 instancetype & id
1>
instancetype在类型表示上,跟id一样,可以表示任何对象类型
2>
instancetype只能用在返回值类型上,不能像id一样用在参数类型上
3>
instancetype比id多一个好处:编译器会检测instancetype的真实类型
5.3 在模型中添加readonly属性
// 定义属性时,会生成getter&setter方法,还会生成一个带下划线的成员变量
//
而如果是readonly属性,则只会生成getter方法,同时没有成员变量
@property (nonatomic, strong, readonly)
UIImage *image;
@interface LFAppInfo()
{
UIImage *_imageABC;
}
- (UIImage
*)image
{
if (!_imageABC) {
_imageABC = [UIImage
imageNamed:self.icon];
}
return
_imageABC;
}
在模型中合理地使用只读属性,可以进一步降低代码的耦合度。
5.4 使用数据模型的好处:
*** 调用方不用关心模型内部的任何处理细节!
6. XIB
Xib文件可以用来描述某一块局部的UI界面
XIB & Storyboard
相同点:
1>
都用来描述软件界面
2> 都用Interface Builder工具来编辑
不同点
1>
Xib是轻量级的,用来描述局部的UI界面
2>
Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系
7. View的封装思路
1>
如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
2>
外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据
8. xcode一些常用快捷键
新建
shift + cmd + n 新建项目
cmd + n 新建文件
视图
option + cmd + 回车 打开助理编辑器
cmd + 回车 显示主窗口
cmd + 0
导航窗口
option + cmd + 0 工具窗口
在.m & .h之间切换
control + cmd + 上/下
按照浏览文件的前后顺序切换 control + cmd + 左右
查看头文件 control + cmd + j
切换到对应的函数 control + 6 支持智能输入,注意输入法
运行
cmd + r 运行
cmd + . 停止
cmd + b
编译
cmd + shift + b 静态内存分析编译,可以检查程序结构上是否存在内存泄露
排版
control + i 将选中按钮重新缩进
cmd + ] 向右增加缩进
cmd + [
向左减少缩进
cmd + / 注释/取消注释,提示:取消注释时,注释双斜线必须在行首
cmd + 向上
到文件开始位置
cmd + 向下 到文件末尾位置