国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

iOS何時使用self.

移動開發 iOS
在ObjC的學習中經常會碰到是否應該使用self的苦惱,或者說什么時候使用全局變量,什么時候self ?

大多數的答案是:“這與objc的存取方法有關”

怎么樣才能有關呢?接下來通過幾個小例子來看一下。

首先我們創建一個學生類:Student類

這個學生類里有學生的id和學生的姓名name

  1. #import  
  2.  
  3.  
  4. @interface  
  5. Student : NSObject{  
  6.  
  7. //idname  
  8.  
  9. NSString *id;  
  10.  
  11. NSString *name;  
  12. }  
  13.  
  14. @property  
  15. (nonatomic,strong) NSString *id;  
  16. @property  
  17. (nonatomic,strong) NSString *name;  
  18.  
  19. @end  
  20.  
  21. 學生類的實現文件  
  22.  
  23. #import  
  24. "Student.h"  
  25.  
  26. @implementation  
  27. Student   
  28.  
  29. @synthesize  
  30. id,name;  
  31.  
  32. @end  

如果使用上面的方法來定義學生類的屬性的get、set方法的時候,那么其他類訪問的時候就是:

獲取student的名字通過student.name來獲取,給名字賦值則使用[student

setName:@“eve”]; 其中student是Student類的對象,如果在Student類內部訪問其成員屬性使用[self
setName:@”evo”], 訪問使用self.name;

上面的方法只是一種,但是很難解釋self該不該使用。請看下面:

我們改寫Student類

  1. #import  
  2.  
  3.  
  4. @interface  
  5. Student : NSObject{  
  6.  
  7. //idname  
  8.  
  9. NSString *_id;  
  10.  
  11. NSString *_name;  
  12. }  
  13.  
  14. @property  
  15. (nonatomic,strong) NSString *id;  
  16. @property  
  17. (nonatomic,strong) NSString *name;  
  18.  
  19. @end  
  20.  
  21. .m文件  
  22.  
  23. #import  
  24. "Student.h"  
  25.  
  26. @implementation  
  27. Student   
  28.  
  29. @synthesize  
  30. id = _id;  
  31. @synthesize  
  32. name = _name;  
  33.  
  34. @end  

可見這樣的寫法我們增加了_id和_name,其中@synthesize也有一定的變化。

如何這個時候使用self.name編譯器就會報錯,這樣就說明了我們通常使用self.name實際使用的是student類name的get方法,同理name的set方法亦是如此。

另外網絡上也有人從內存管理方面來說明的,我將其剪切出來以供學習:

ViewController.h文件,使用Student類,代碼如下:

  1. #import  
  2. @  
  3. class Student;  
  4.  
  5. @  
  6. interface ViewController : UIViewController{  
  7.  
  8. Student *_student;  
  9. }  
  10.  
  11. @property  
  12. (nonatomic, retain) Student *student;  
  13.  
  14. @end  
  15.  
  16. ViewController.m文件,代碼:  
  17.  
  18. #import  
  19. "ViewController.h"  
  20. #import  
  21. "Student.h"  
  22.  
  23. @implementation  
  24. ViewController  
  25. @synthesize  
  26. student = _student;  
  27.  
  28. -  
  29. (void)didReceiveMemoryWarning  
  30. {  
  31.  
  32. [super didReceiveMemoryWarning];  
  33. }  
  34.  
  35. #pragma  
  36. mark - View lifecycle  
  37.  
  38. -  
  39. (void)viewDidLoad  
  40. {  
  41.  
  42. [super viewDidLoad];  
  43. }  
  44.  
  45. -  
  46. (void) dealloc  
  47. {  
  48.  
  49. [_student release];  
  50.  
  51. _student = nil;  
  52.  
  53. [super dealloc];  
  54. }  
  55. 其它的方法沒有使用到,所以這里就不在顯示了。  
  56.  
  57. 在ViewController.m的viewDidLoad方法中創建一個Student類的對象  
  58.  
  59. Student  
  60. *mystudent = [[Student alloc] init];  
  61. self.student  
  62. = mystudent;  
  63. [mystudent  
  64. release];  

接下來就需要從內存角度來分析它們之間的區別了:

1、加self的方式:

  1. Student  
  2. *mystudent = [[Student alloc] init];  //mystudent 對象  
  3. retainCount = 1;  
  4. self.student  
  5. = mystudent; //student 對象 retainCount = 2;  
  6. [mystudent  
  7. release];//student 對象 retainCount = 1;  
  8. retainCount指對象引用計數,student的property  
  9. 是retain 默認使用self.student引用計數+1。  

2、不加self的方式

  1. Student  
  2. *mystudent = [[Student alloc] init];  //mystudent 對象  
  3. retainCount = 1;  
  4. student  
  5. = mystudent; //student 對象 retainCount = 1;  
  6. [mystudent  
  7. release]; //student 對象內存已釋放,如果調用,會有異常  

3、加self直接賦值方式

self.student = [[Student alloc] init];//student 對象 retainCount =

2;容易造成內存泄露

由于objective-c內存管理是根據引用計數處理的,當一個對象的引用計數為零時,gcc才會釋放該內存

個人總結:只需要在屬性初始化的時候使用self.屬性,其他時候直接使用屬性名就行;使用self.是 使retaincount+1,為了確保當前類對此屬性具有擁有權

個人使用習慣:

  1. @interface CustomClass : UIViewController 
  2.     NSString *str 
  3. @property (retain, nonatomic) NSString *str; @implementation CustomClass @synthesize str; -(void)viewDidLoad 
  4. //方法一  用alloc必須手動釋放一次 self.str  =  [[NSString alloc]initWithString:@"my str"]; 
  5.      [str release]; //方法二 用類方法不用 self.str =     [NSString stringWithString:@"my str"]; 
  6.  
  7.     以后調用時直接使用str,不必使用self.str 
  8.    [str appendString:@"\n"]; 
  9. //在dealloc中必須釋放 - (void)dealloc 
  10. //方法一  [str release]; 
  11.     str = nil; //方法二 self.str = nil; 
  12.  
  13.     [super dealloc]; 
  14. }  
責任編輯:張葉青 來源: 開源社區
相關推薦

2011-07-20 13:34:37

Objective-C self.

2012-01-18 10:13:50

Objective-CiOSself

2020-10-21 14:54:02

RustGolang開發

2011-08-08 15:43:01

MySQL索引

2021-04-12 07:34:03

Java集合框架

2021-11-26 09:00:00

數據庫數據集工具

2019-11-29 07:53:07

DNSTCP網絡協議

2025-08-11 08:05:58

MCP服務工具

2020-12-13 14:32:22

5GWi-Fi 6

2021-12-09 09:52:36

云原生安全工具云安全

2012-02-08 11:01:53

HibernateJava

2024-04-16 12:00:14

API系統

2025-07-29 10:00:00

指針開發Go

2024-08-01 10:10:24

MySQL場景搜索

2020-10-10 10:20:11

云計算云安全技術

2025-05-19 08:13:45

2021-06-01 11:11:26

物聯網互聯網IoT

2021-04-25 15:06:16

微軟虛擬桌面IT

2018-12-12 09:59:47

微服務架構分布式系統

2024-10-07 08:49:25

點贊
收藏

51CTO技術棧公眾號

欧美激情视频在线观看| 波多野结衣在线aⅴ中文字幕不卡| 欧美视频中文在线看| 中文久久久久久| 亚洲深深色噜噜狠狠爱网站| 久久福利视频导航| 黄色av网站在线看| 久久精品综合网| 亚洲精品偷拍视频| 日韩高清在线一区| 国产精品区一区二区三含羞草| 成人同人动漫免费观看| 性欧美亚洲xxxx乳在线观看| 久久视频社区| 免费成人高清视频| 伊人国产精品| 日韩资源在线观看| 精品三级在线| 中文字幕日韩视频| 亚洲不卡系列| 中文字幕亚洲欧美| 第四色男人最爱上成人网| 亚洲国产三级网| 青青在线视频| 精品91自产拍在线观看一区| av激情在线| 亚洲精品一区二区三区影院 | 国产精品久久久久久久久电影网| 麻豆成人久久精品二区三区小说| 欧美日韩在线不卡一区| 西西人体一区二区| 亚洲国产精品一区在线观看不卡| 日韩精品电影在线| 在线视频福利一区| 成人精品高清在线| 精品久久久久久久免费人妻| 国产精品国产三级国产三级人妇| 国产精品久久久久久精| 午夜精品国产更新| 色影视在线观看| 亚洲成人激情在线观看| 亚洲成人激情社区| 免费av一区二区| 伊人久久大香线蕉综合网蜜芽| 国产一区私人高清影院| 久久久国产精品一区二区中文| 国产又爽又黄ai换脸| 久久亚洲综合色| 天天槽夜夜槽| 色综合一区二区| 91资源在线观看| 欧美高清视频在线观看| 日本道不卡免费一区| 欧美日韩在线一区二区三区| 国产不卡免费视频| 97视频在线| 欧美亚洲综合一区| 在线能看的av网址| 久久这里只有精品视频首页| 欧洲乱码伦视频免费| 欧美一区1区三区3区公司| 国产福利一区二区三区| 成人片在线播放| 7777精品伊人久久久大香线蕉完整版 | 窝窝社区一区二区| 成人一区二区三区四区| 欧美激情视频一区二区三区免费| 亚洲精品国产精品国自产| 国产成人av电影在线观看| 猫咪成人官网| 精品久久久久久久久久久久久久久久久 | 91精品国产91久久久| 亚洲国产午夜| 妺妺窝人体色www在线小说| 精品美女国产在线| 欧美色图天堂| 一区不卡视频| 国产suv精品一区二区883| 一道本在线免费视频| 日韩欧美国产麻豆| jizzjizzjizz欧美| 国产女主播一区二区| 国产肉丝袜一区二区| 98在线视频| 精品自在线视频| 亚洲青涩在线| 男女视频在线看| 3d成人动漫网站| 国产精品自在| 日韩精品久久久| 最新日韩在线视频| 免费观看成人高| 久久电影天堂| 午夜精品短视频| 中文字幕av一区| 五月综合激情网| 欧美人成网站| 手机av免费在线| 久久国产一区二区三区| 久久亚洲私人国产精品va| 欧美日本精品在线| 国产日韩精品在线播放| 国产在线播放91| 精品无人区乱码1区2区3区在线| re久久精品视频| 国产精品视频首页| 天天躁日日躁狠狠躁欧美| 九七电影院97理论片久久tvb| 国产二区在线播放| 自拍视频在线网| 69日本xxxxxxxxx49| 亚洲在线视频一区二区| 欧美高跟鞋交xxxxhd| 欧美国产精品日韩| 最新国产成人av网站网址麻豆| 日韩欧美一区二区三区在线| 久久国产人妖系列| 美女久久99| 加勒比一区二区三区| 成人在线免费观看网站| 另类ts人妖一区二区三区| 91蜜桃在线视频| 99爱在线视频| 国精产品一区一区三区视频| 99久久无色码| 黄色一级片av| 欧美在线一二三区| 国产精品444| 欧美中文字幕在线播放| 国产精品亚洲片夜色在线| www日韩中文字幕在线看| 九九热这里只有精品6| 日韩av电影国产| 欧美成人精品在线播放| 欧美三级一区二区| 国产剧情一区二区| 成人三级黄色免费网站| 青椒成人免费视频| 亚洲精品三级| 成人在线免费观看视频| 久久日韩视频| 黄色三级视频在线| 中文字幕第38页| 中文字幕免费不卡在线| 日本综合精品一区| 在线毛片网站| 在线观看91精品国产麻豆| 欧美mv和日韩mv的网站| 91精品国产自产精品男人的天堂| 91国内精品久久| 99视频免费观看蜜桃视频| 欧美日韩国产精品一卡| 国产一级爱c视频| 日本综合在线| 嫩呦国产一区二区三区av| 任你弄精品视频免费观看| 伊人久久一区| 国产主播性色av福利精品一区| 欧美大胆成人| 全球最大av网站久久| 亚洲视频一二| 久久色在线观看| 精品一区二区三区四区| **欧美日韩vr在线| av在线不卡观看| 日本肉体xxxx裸体xxx免费| 日韩在线观看中文字幕| 亚洲欧洲日韩一区二区三区| 日韩一区二区麻豆国产| 欧美大片拔萝卜| 亚洲美女在线看| 欧美成人小视频| 欧洲午夜精品久久久| 1区1区3区4区产品乱码芒果精品| 国产精品欧美激情在线播放| 欧美久久久精品| 欧美中文字幕视频| 亚洲www在线观看| 极品尤物一区二区三区| 欧美福利一区二区三区| 91在线丨porny丨国产| 国产精品视频一区二区三区四蜜臂| 你懂的在线观看一区二区| 欧美经典一区二区| 99在线观看视频网站| 亚洲夜夜综合| 看电视剧不卡顿的网站| 久久伊99综合婷婷久久伊| 欧美日韩中文字幕综合视频| 亚洲欧美另类中文字幕| 高清欧美性猛交xxxx| 久久久久综合一区二区三区| 日本va中文字幕| 青草影视电视剧免费播放在线观看| 成人av集中营| 国产精品嫩草99av在线| 欧美性感美女h网站在线观看免费| 一区二区三欧美| 国产精品一区视频网站| 初尝黑人巨炮波多野结衣电影|