你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS基本常識之@property 和 Ivar 的差別

iOS基本常識之@property 和 Ivar 的差別

編輯:IOS開發綜合

@property

屬性實際上是對成員變量的一種封裝。我們先年夜概如許懂得:

@property = Ivar + setter + getter

Ivar

Ivar可以懂得為類中的一個變量,重要感化是用來保留數據的。

我們無妨來看個例子,經由過程下邊的例子可以或許很清晰的說明這兩個東東:

我們新建一個Person類

@interface Person : NSObject
{
NSString *name0;
}
@property(nonatomic,copy)NSString *name1;
@end
@implementation Person
- (instancetype)init {
if (self = [super init]) {
}
return self;
}
@end

在這個Person中name0就是成員變量,name1就是屬性。

我們創立一個Person:

Person *p= [[Person alloc] init];
p.name1 = @"abc";
NSLog(@"%@",p.name1);

我們會發明,我在Person類外邊是不克不及拜訪name0的,這解釋了甚麼?這解釋成員變量<font color=red>name0</font>只能在它本身的類的外部被拜訪。

是以,我們揣摸出,@property其實也帶有接口屬性,也就是可以或許被內部對象拜訪。

p.name1 = @"abc";

這行代碼實際上是挪用了Person中name1的setter辦法。

NSLog(@"%@",p.name1);

這行代碼實際上是挪用了Person中name1的getter辦法。

再說說setter和getter辦法。年夜家應當都曉得oc中有著嚴厲的定名標准,拿這個例子來講,依據name1主動生成了

- (void)setName1:(NSString *)name1{}
- (NSString *)name1

留意:這裡其實不評論辯論MRC的情形,一切說明的條件都是在ARC下。

@synthesize

這個症結字用來指定成員變量

我們在Person的完成中,把代碼改成如許:

@implementation Person
@synthesize name1 = _name2;
- (instancetype)init {
if (self = [super init]) {
_name2 = @"aaa";
}
return self;
}
@end

如許我們就指定了name1的成員變量為_name2了,我們在Person的初始化init辦法中基本打不出_name1這個屬性。

Person *p= [[Person alloc] init];
// p.name1 = @"abc";
NSLog(@"%@",p.name1);

我們正文失落賦值的那一行,可以看到打印成果為:aaa。

以上所述是小編給年夜家引見的IOS基本常識之@property 和 Ivar 的差別,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對本站網站的支撐!

【iOS基本常識之@property 和 Ivar 的差別】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved