日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

self.用法

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 self.用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們經常會在官方文檔里看到這樣的代碼:

?MyClass.h?[?/?lang?]?@interface?MyClass?:?NSObject?{?MyObject?*?myObject;?}?@property?(?nonatomic,?retain?)?MyObject?*?myObject;?@end?MyClass.m?@synthesize?myObject;?-?(?id?)?init?{?if

我們經常會在官方文檔里看到這樣的代碼:
MyClass.h

[/lang]

@interface?MyClass?:?NSObject?{

????MyObject?*myObject;

}

@property?(nonatomic,?retain)?MyObject?*myObject;

@end

?

MyClass.m

?

@synthesize?myObject;

?

-(id)init{

????if(self?=?[super?init]){

????????MyObject?*?aMyObject?=?[[MyObject?alloc]?init];

????????self.myObject?=?aMyObject;

????????[aMyObject?release];

????}

????return?self;

}

有人就問,?為什么要這么復雜的賦值??為什么要加self.???直接寫成self.myObject?=?[[MyObject?alloc]?init];不是也沒有錯么??不加self有時好像也是正常的??現在我們來看看內存管理的內容:

??先看間接賦值的:

????1.self.:

?

????????MyObject?*?aMyObject?=?[[MyObject?alloc]?init];?//aMyObject?retainCount?=?1;

????????self.myObject?=?aMyObject;?//myObject?retainCount?=?2;

????????[aMyObject?release];//myObject?retainCount?=?1;

?

????2.?不加self.:

?

???????MyObject?*?aMyObject?=?[[MyObject?alloc]?init];?//aMyObject?retainCount?=?1;

????????myObject?=?aMyObject;?//myObject?retainCount?=?1;

????????[aMyObject?release];//對象己經被釋放?

?

再看直接賦值的:

????3.self.:

?

self

.myObject

=?[[

MyObject

alloc]?init]

;

//myObject?retainCount?=?2;

?

????4.?不加self.:

?

????????myObject?=?[[MyObject?alloc]?init];?//myObject?retainCount?=?1;

?

現在是不是有點暈,?我們先來把代碼改一下,?官方的一種常見寫法:

MyClass.h

?

@interface?MyClass?:?NSObject?{

????MyObject?*?_myObject;

}

@property?(nonatomic,?retain)?MyObject?*myObject;

@end

?

MyClass.m

??@synthesize?myObject?=?_myObject;?

OK,?你現在再試下,?如果你用self._myObject?=?aMyObject;?或者?myObject?=?aMyObject;?你會得到一個錯誤,?為什么呢,?這里就是和Obj-c的存取方法有關了.?說白了很簡單?,?大家都知道,?@property?(nonatomic,?retain)?MyObject?*myObject;?是為一個屬性設置存取方法,?只是平時我們用的方法名和屬性名是一樣的,現在你把它寫成不同的名字,?就會很清楚了.?_myObject是屬性本身,?myObject是存取方法名.

現在我們知道self.是訪問屬性的存取方法了,?那存取方法又怎么工作的??self.myObject?=?[[MyObject?alloc]?init];?為什么會有內存泄露?

關于nonatomic我不多解釋了,?它不是我要講的重點,?而且我也沒完全搞清楚,?不誤導大家.?我只說assign,?retain?,copy.

get方法是:

?

-(MyObject*)myObject{

????return?_myObject;

}

?

Set方法是:

?

//?assign?

-(void)setMyObject:(id)newValue{

????_myObject?=?newValue;?

}

//?retain?

-(void)setMyObject:(id)newValue{

????if?(_myObject?!=?newValue)?{?

????????[_myObject?release];?

????????_myObject?=?[newValue?retain];?

????}??

}

//?copy?

-(void)setMyObject:(id)newValue{

????if?(_myObject?!=?newValue)?{?

????????[_myObject?release];?

????????_myObject?=?[newValue?copy];?

????}?

}

?

其實這些方法里還有別的內容,?并不只是這些.?而且這些方法可以被重寫.?比如你寫一個

?

-(MyObject*)myObject{

?

????return?_myObject;

}

?

放在你的類里,?你調用self.myObject(不要把它放在等號左邊,?那會調用get方法)就會調用這個方法.

這里多說一句,?@property?是為你設置存取方法,?和你的屬性無關,?你可以只寫一句

?

@property?(readonly)?NSString?*name;

?

在你的類里實現

?

-(NSString*)name{

????NSLog(@"name");

????return?@"MyClass";

}

?

同樣可以用self.name調用.

現在回頭?說說我們開始的那四個賦值,?當不用self.的時候,??那句話只是一般的賦值,?把一個指針賦給另一個指針,?不會對分配的內存有任何影響,?所以2中不要最后[aMyObject?release];這句話和4是一回事.?這里就不多說了.我們看看13,?
當調用?setMyObject:方法時,?newValue?做了一次retain操作,?我們必須把原來的newValue釋放掉,?不然就會內存泄露,?1,?我們有個aMyObject可以用來釋放,?3,?我們無法釋放它,?所以,?3,?我們會多出來一個retainCount.?內存泄露了.

說了這么多,?我只想讓大家清楚,?什么是調用屬性本身,?什么是調用存取方法.?怎么樣才能避免內存泄露,?而且,?以上例子里是在自己類里的調用,?如果這個類被別的類調用時,?更要注意一些,

順便說一下,?如果你想在其它類訪問對象屬性,?而不是通過存取方法,?你可以用myClass?->?myObject來訪問,?這樣是直接訪問對象本身,?不過你先要把myObject設成@public.?但這個是官方不提倡的,

總結

以上是生活随笔為你收集整理的self.用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: jiz亚洲| 一级特级毛片 | 免费国产小视频 | 国产一区二区三区自拍 | 日韩极品少妇 | 亚洲天堂免费av | 久久视频这里只有精品 | 999国产视频| 久久久久亚洲色欲AV无码网站 | 欧美黑人做爰爽爽爽 | 精品国产制服丝袜高跟 | 精品无人国产偷自产在线 | 男女啪啪毛片 | 色呦呦免费观看 | 永久免费在线播放 | 国久久久 | 国产精品伦 | 国产一区 在线播放 | 激情五月色婷婷 | 交专区videossex | 久久人人爽人人爽人人片av免费 | 精品国产99久久久久久 | 97超碰伊人| 好吊色一区二区 | 欧美中文字幕 | www.久久综合 | 国产精品麻豆成人av电影艾秋 | 女女调教被c哭捆绑喷水百合 | 一级片免费播放 | 日本二三区| 在线观看av的网站 | 午夜精品999 | www黄在线观看| 成年人在线网站 | 久久久国 | 日韩第1页 | 亚洲精品www久久久久久广东 | 日韩精品一区二区三区视频 | 38激情| 国产尤物视频在线观看 | 激情综合网站 | 国产黄在线免费观看 | 国产成人无码www免费视频播放 | 国产福利99| 亚洲最大看欧美片网站 | 精品无码国产污污污在线观看 | 羞羞涩涩网站 | 国产av一区二区三区最新精品 | 在线免费观看污视频 | 国产精品精品久久久 | 欧美黑吊大战白妞 | 一级片欧美 | 国产寡妇色xxⅹ交肉视频 | 九一国产视频 | 中文字幕国产在线观看 | 精品视频一区二区三区在线观看 | 男人操女人免费网站 | 一区二区三区成人 | 国产精品扒开腿做爽爽爽男男 | 大黑人交交护士xxxxhd | 成人免费高清在线播放 | 夜夜草视频 | 午夜精品一区二区在线观看 | 一卡二卡精品 | 一区二区三区视频在线 | 91爱爱网站 | 91文字幕巨乱亚洲香蕉 | 久久99久久久久久 | 农村妇女毛片 | 华丽的外出在线 | 亚洲天堂女人 | 黄色三级图片 | 波多野结衣一区二区在线 | 长河落日| 91免费成人 | 五月丁香综合激情六月久久 | 无码 制服 丝袜 国产 另类 | 国产精品视频在线观看免费 | 青青草色视频 | 青青伊人网 | 日夜夜操| 国产精品一区二区三区免费看 | 黄色大全在线观看 | 天堂网资源 | 在线国产区 | 免费看爱爱视频 | 亚洲不卡中文字幕无码 | 国产女人在线 | 一区二区黄色片 | 手机看片中文字幕 | 国产精品福利电影 | 国产精品尤物视频 | 香蕉视频在线免费看 | 日本老师巨大bbw丰满 | 天天综合网天天综合色 | 性生交大片免费看女人按摩 | 又黄又色又爽 | 成人娱乐网 | 午夜日韩电影 |