今天遇到了幾個和字符串相關(guān)的內(nèi)存問題,和大家分享一下
創(chuàng)新互聯(lián)公司長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為椒江企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站設(shè)計,椒江網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。NSString *name = [[NSString alloc]initWithString:@"張三"];
NSLog(@"%d",[name retainCount]);
這兩行代碼的打印結(jié)果是-1,
NSString * aString = [[NSString alloc] initWithFormat:@"123"];
NSLog(@"%d",aString.retainCount);
這兩行代碼的打印結(jié)果也是-1
NSString * aString = [[NSString alloc] initWithFormat:@"1233sfsf4545f"];
NSLog(@"%d",aString.retainCount);
當(dāng)就字符串變?yōu)樯厦嫠鰰r,打印結(jié)果變?yōu)榱?
這就奇怪了,為什么相同的語法打印的結(jié)果會是不同呢?反過來分析,打印結(jié)果是-1說明引用指向的是常量區(qū)的字符串,打印結(jié)果是1指向的是堆區(qū)的字符串。由于OC是不開源的,內(nèi)部的實現(xiàn)我們不得而知,但是從中我們至少可以猜測,OC中對不同大小的字符串是由不同的方法的。
initWithString產(chǎn)生的是將指針指向了常量區(qū)的字符串,是無法被release的,如果使用dealloc進行摧毀會報錯。其一:不能手動調(diào)用dealloc方法 再者蘋果官方文檔中說的很清楚,創(chuàng)建的對象和retain的對象為自己所保有,這些對象全部都是在堆區(qū)的。靜態(tài)區(qū)的內(nèi)存實在編譯時就分配好了的,它的內(nèi)存地址非??壳埃以诔绦蜻\行的整個階段都存在,所以我們不能釋放。
關(guān)于類簇(class cluster)大家舉得最多的例子就是NSNumber類,其實NSNumber類是一個抽象的超類,內(nèi)部有很多的具體的子類,如NSInt NSDouble等,它們對應(yīng)不同的初始化方法,也就是說NSNumber的不同初始化方法返回的類型是不同的。不僅NSNumber,NSString也是如此,
// 類簇的使用
id someClass = [NSString alloc]; // 返回的對象類型:NSPlaceholderString
NSString *string1 = [[NSString alloc] init]; // 返回的對象類型:__NSCFConstantString
NSString *string2 = [[NSString alloc] initWithFormat:@"string2"]; // 返回的對象類型:__NSCFString
NSLog(@"%@", string1);
NSLog(@"%@", string2);
類簇可以簡化一個面向?qū)ο蟮墓_架構(gòu),而又不減少功能的豐富性
我們在項目中肯定會遇到類的初始化方法傳參的情況,如果實在MRC模式下,如何保證內(nèi)存不leak,蘋果的官方文檔做了如下推薦
- (id)initWithName:(NSString*)name{
self = [super init];
if(self){
_name = [name copy];// 當(dāng)然name屬性的語義控制要使用copy
}
return self;
}
使用self.name = name;其實和上面是相同的
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
新聞標(biāo)題:OC中的類簇的使用和初始化方法中屬性的使用-創(chuàng)新互聯(lián)
URL分享:http://www.rwnh.cn/article24/cedeje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、建站公司、服務(wù)器托管、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容