天天看點

黑馬程式員——Objective-C語言知識整理——類成員變量的設定與擷取1、傳統的getter與setter方法2、點文法介紹3、點文法的使用 5、@property用法6、@property使用注意 7、@synthesize使用8、@synthesize指定執行個體變量指派9、增強型的@property

------- android教育訓練、java教育訓練、IOS教育訓練期待與您交流! ----------

1、傳統的getter與setter方法

首先,在類的聲明處定義成員變量,并聲明各變量的set與get方法,最後在類的實作部分,實作各成員變量的set與get方法。

2、點文法介紹

與傳統的getter與setter方法不同,點文法的使用更為友善。但是使用點文法并不是直接通路執行個體變量的,而是由xcode工具自動替換為setter與getter方法的調用的。

點文法是xcode的特性,幫使用者進行代碼替換的。

3、點文法的使用

(1) 設定成員變量值

Person類含_age與_name兩個成員變量。

設定成員變量的值使用:

Person *p = [Person new]; 

p._age = 18;

p._name = @"Danny";

等同于使用setter方法:

Person *p = [Person new];

[p setAge:18];

[p setName:@"Danny"];

(2) 擷取成員變量值

Person類含_age與_name兩個成員變量。

使用點文法擷取成員變量的值:

int a = p.age;

NSString *s = p._name;

等同于使用getter方法:

int a = [p age];

NSString *s = [p name];

4、點文法使用注意

點文法使用本質是調用類的setter與getter對象方法,如果沒有指定方法,不能使用點文法。

同時,注意setter與getter方法使用,防止self點文法死循環調用。

5、@property用法

編譯器指令@property的使用。

使用格式:@property 類型名 方法名

相當于get與set方法的聲明。

代碼示例:

///@property 使用

#pragma mark Person類
@interface Person:NSObject
{
	int _age;
	NString _name;
}

@property int age;
@property NSString name;

@end
           

6、@property使用注意

(1) 隻能寫在@interface與@end之間。

(2) 是用來自動生成get與set方法的。

(3) 告訴@property使用成員變量的類型

7、@synthesize使用

編譯器指令@synthesize的使用。

與@property成對使用,完成類的set與get方法的聲明與實作。

使用格式:@synthesize 變量名1,變量名2……(成員變量類型一緻)。

相當于get與set方法的實作,并且建立執行個體的成員變量。

代碼示例:

#pragma mark Person類的實作
@implementation Person

@synthesize age;
@synthesize name;
/* 等同于
- (void)setName:(NSString *) name{
  name = name;
}

<pre name="code" class="objc">- (void)setAge:(int) age{
  age = age;
}
           
- (NSString *)name{
  return name;
}
           

- (int)age{

return age;

}

*/

@end

8、@synthesize指定執行個體變量指派

使用方法格式:@synthesize 方法名1=變量名1,方法名2=變量名2
#pragma mark Person類的實作
@implementation Person

@synthesize age=_age,name=_name;
<pre name="code" class="objc">/* 等同于
- (void)setName:(NSString *) name{
  _name = name;
}

<pre name="code" class="objc">- (void)setAge:(int) age{
  _age = age;
}
           
- (NSString *)name{
  return _name;
}
           

- (int)age{

return _age;

}

*/

@end

9、增強型的@property

增強型的@property将成員變量的get與set方法的聲明與實作工作都完成了,而且預設的使用帶下劃線的成員變量,若不存在,則自動定義生成相關成員變量。

變量是私有的,不能被繼承使用。