首页 > 代码库 > IOS学习笔记 -- 基础MVC初学习

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 + 向下 到文件末尾位置