iOS Weak Strong Label字体适配
2018-04-23 本文已影响5人
烟雨痕
一、Strong、 Weak
1.__strong引用确保了对象在其作用域内不会被销毁。对象只会在方法完成之后被回收。
- (IBAction)strongAction:(id)sender {
NSLog(@"enter: %s", __PRETTY_FUNCTION__);
Photo *photo = [[Photo alloc] init];
NSLog(@"Strong Photo: %@", photo);
photo.title = @"Strong Photo";
NSMutableString *ms = [[NSMutableString alloc] init];
[ms appendString:photo == nil ? @"Photo is nil" : @"Photo not is nil"];
[ms appendString:@"\n"];
if (photo != nil) {
[ms appendString:photo.title];
}
self.titleLabel.text = ms;
NSLog(@"exit %s", __PRETTY_FUNCTION__);
}
strong.png
2.__weak引用对引用计数没有作用。因为内存被分配在方法内且一个__weak引用指向这段内存,引用计数为0,对象被立即回收,甚至在其被用于紧邻的下一个语句前。
weak.png
3.Strong-->Weak,虽然__weak引用不会增加引用计数,但之前创建的__strong引用确保了对象不会再方法结束前释放。
Strong-->Weak.png 局部变量.png 属性.png
二、Label字体适配,字体下面被截
出自文章 http://mrpeak.cn/blog/uilabel/
UILabel *lab = [[UILabel alloc] init];
lab.frame = CGRectMake(10, 100, 200, 30);
lab.text = @"gyjq";
lab.font = [UIFont systemFontOfSize:30];
[self.view addSubview:lab];
//常用 字体根据控件的宽度 自动适应大小
lab.adjustsFontSizeToFitWidth = YES;
//第一种
[lab sizeToFit];
//第二种
CGSize suggestSize = [lab sizeThatFits:CGSizeMake(200, 30)];
CGRect frame = lab.frame;
frame.size.height = suggestSize.height;
lab.frame = frame;
//第三种
CGSize labelSize = [lab.text boundingRectWithSize:CGSizeMake(200.0, MAXFLOAT) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:30]} context:nil].size;
CGRect labframe = lab.frame;
labframe.size.height = labelSize.height;
lab.frame = labframe;
//第四种
CGSize size = [lab.text sizeWithAttributes:@{NSFontAttributeName : lab.font}];
CGRect lableframe = lab.frame;
lableframe.size.height = size.height;
lab.frame = lableframe;