1設(shè)置圖片的拉伸點(diǎn)
_bgImgView.image = [_bgImgView.image stretchableImageWithLeftCapWidth:100 topCapHeight:29];
2獲取tableView內(nèi)容總高度燎潮,適用于tableView中每一個cell高度不同嘱腥,而你有需要在外部知道tableView的高度的情況下年扩。
[tableView layoutIfNeeded];
CGFloat tableHeight =? tableView.contentSize.height;
3刪除字符串特殊字符
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"\n"];
NSString *trimmedString = [content stringByTrimmingCharactersInSet:set];
4強(qiáng)引用和弱引用涣澡。什么時候用Weak什么時候用assign
強(qiáng)引用,strong意思是在我們不希望對象的銷毀由是否被其他對象所引用來決定的時候舱殿,我們采用強(qiáng)引用影锈,也就是說當(dāng)我們強(qiáng)引用某個對象時娃磺,此對象的retainCount+1,當(dāng)retainCount = 0的時候徽职,此對象才會被銷毀象颖,由于我們需要對對象進(jìn)行內(nèi)存管理,所以默認(rèn)是強(qiáng)引用姆钉。
當(dāng)對象的生命周期不被其他對象引用是否引用限制的時候说订,采用弱引用,他該什么時候銷毀育韩,就在什么時候銷毀克蚂。即便還有對象引用它,但它的生命周期已經(jīng)結(jié)束就會被銷毀筋讨。
weak和assign的用法基本相同埃叭。區(qū)別在于weak必須是oc對象。并weak屬于歸零弱引用悉罕,當(dāng)對象被銷毀之后指針置nil赤屋。在需要放置循環(huán)引用的時候,通過一端采用weak來解決壁袄。
5關(guān)于Copy和strong的區(qū)別
在MRC模式下类早,對block的修飾用copy,在ARC模式下嗜逻,效果相同涩僻。
在屬性修飾的時候,通常NSString,NSArray逆日,NSDictionary使用copy來修飾嵌巷,這是因為它們的子類對應(yīng)有可變的類型,他們可以動態(tài)的進(jìn)行賦值操作室抽。所以如果我們需要保證字符串或數(shù)組的值不被改變搪哪,就需要將其完全復(fù)制一份,成為不可變的類型保存起來坪圾。
copy是深復(fù)制晓折,strong是淺復(fù)制。
@property(copy,nonatomic)NSString * string;
如果這個時候有一個可變字符串NSMutableString *mStr兽泄;
mStr = @"我是一個可變的字符串"
string = mStr;
mStr = @"我現(xiàn)在重新賦值了一次"漓概;
此時如果沒有使用copy進(jìn)行修飾,string的值會變成“我現(xiàn)在重新賦值了一次”已日,所以當(dāng)我們不希望修飾的string的值被改變的時候垛耳,應(yīng)當(dāng)用copy修飾。
另外一種情況飘千,那么當(dāng)我們需要修飾可變的類型的時候堂鲜,使用copy還是strong呢?
比如@property(copy护奈,nonatomic)NSMutableArray *mArr;
NSMutableArray*copyArray ?= [NSMutableArray array];
mArr= copyArray缔莲;相當(dāng)月mArr= [copyArray copy];
由于使用copy修飾,那么此時mArr被深復(fù)制為一個不可變的數(shù)組霉旗,這個時候可變數(shù)組的一些方法痴奏,在NSArray中是沒有的,當(dāng)找不到這些可變數(shù)組中獨(dú)有的實例方法的時候厌秒,就會報錯读拆。所以當(dāng)修飾可變類型的時候,使用Strong修飾鸵闪,因為不會深復(fù)制一個新的對象檐晕。
6關(guān)于NSUserDefault如何保存自定義對象
NSUserdefault是經(jīng)常使用的數(shù)據(jù)持久化方法,它的操作非常簡單蚌讼,對于它能夠接受的類型的存儲和讀取都非常方便辟灰,但是如果我們需要保存自己自定義的對象時,該如何使用NSUserDefault篡石?
比如我們要保存一個類芥喇,而這個類中有兩個屬性,年齡和名字凰萨,這個時候如果想要把這個類保存在NSUserDefault中就需要做一些特殊的處理继控。
首先在自定的這個類中械馆,比如是student,我們需要申明NSCoding協(xié)議湿诊,然后在.m文件中按照NSCoder的要求對這個類進(jìn)行歸檔狱杰,將類型轉(zhuǎn)換為NSData格式瘦材。然后再將其存入NSUserDefault中厅须。
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];
[aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self)
{
self.InsureSolutionID= [aDecoder decodeObjectForKey:@"personName"];self.InsureSolutionName= [aDecoder decodeObjectForKey:@"personAge"];
}
return self;
}
最后將這個類轉(zhuǎn)化為NSData
NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:self.student];
然后將archiveCarPriceData存入NSUserDefault。