1、用代码搭建界面的时候,可以使用 getter 的方法去实现每个控件的创建
@property (nonatomic, strong) IBOutlet UILabel *pageLabel;
………………省略
- (UILabel *) pageLabel
{
if (_pageLabel == nil) {
_pageLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, 40)];
_pageLabel.text = @"1/5";
_pageLabel.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:_pageLabel];
}
return _pageLabel;
}
这样做的好处是不会让 viewDidLoad函数里面代码过多,看起来代码清晰明了,还可以降低不同控件之间的耦合度。
2、使用 plist 文件来代替 在代码里面写数组、字典的定义,
数据直接写在代码里面,如果数据经常改动,会造成代码扩展性低,
放在plist 文件中可以直接修改文件即可,不需要修改代码。
初始化数据同上面1的方法,使用 get方法初始化,
- (NSArray *) listArray
{
if (_listArray == nil) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"ListArray" ofType:@"plist"];
_listArray = [NSArray arrayWithContentsOfFile:path];
}
return _listArray;
}
3、上面的 get 方法 称为“懒加载”或者 “延迟加载”。
4、上面获取本地文件的时候使用的是
NSString *path = [[NSBundle mainBundle] pathForResource:@"ListArray" ofType:@"plist"];
[NSBundle mainBundle] app 应用文件路径,
路径下查找名字为 ListArray,格式为 plist 的文件。
// name 、text 为 key 值, 是你在 plist 里面设置的key
//下面可以获取到 plist 文件中的数据,self.listArray是上面获取到的数组数据。
NSString *imageName = self.listArray[self.index] [@"name"];
NSString *descText = self.listArray[self.index] [@"text"];
5、strong 和 weak 的比较。
ARC 中 dealloc 主要用于调试,判断对象是否被释放。
在 OC 中
1、如果对象没有被强引用,会被立即释放。
2、默认的对象,都是强引用。
比如有一个 Person 类,
Person *p = [[Person alloc]init];//p 是强引用类型。
__weak Person *p = [[Person alloc]init]; // p 是弱引用,
IBOutlet的属性一般可以设为weak,是因为它已经被view引用了,除非view被释放,否则IBOutlet的属性也不会被释放,
另外IBOutlet属性的生命周期和view应该是一致的,所以IBOutlet属性一般设为weak。
所以拖出来的控件一般都是 weak,因为它已经被 view 引用了。
自己用代码定义控件,一般常使用 strong 属性,(这里也可以使用 weak,需要初始化之后,使用 [self.view addSubview:_pageLabel]; addSubview可以使此控件(定义的 weak 控件)受 view 管理。)
知乎上别人的一个解释,让大家笑一笑:
因为控件他爹( view.superview )已经揪着它的小辫了( strong reference ),你( viewController )眼瞅着( weak reference )就好了。
当然,如果你想在 view 从 superview 里面 remove 掉之后还继续持有的话,还是要用 strong 的( 你也揪着它的小辫, 这样如果他爹松手了它也跑不了 )。
6、图片小知识
图片格式的影响,
1. JPG:压缩比比较高,通常用于照片、网页,属于有损压缩(噪点)
解压缩时,对 CPU消耗大,意味着慢、费电
2. PNG: 压缩比较高
无损压缩,
解压缩时效率高,对 CPU 消耗小,苹果推荐使用 png 格式
7、数字补0
[NSString stringWithFormat:@"%02d",1]
01
不到两位的补0
[NSString stringWithFormat:@"%.3f",0.02]
0.020
%f,默认应该是6位。 -> 0.020000
小数点后几位