setter方法:
作用: 設(shè)置成員變量的值
格式:
- setter方法一定是對(duì)象方法
- 一定沒(méi)有返回值
- 一定以set開頭, 并且set后面跟上需要設(shè)置的成員變量的名稱去掉下劃線, 并且首字母大寫
- 一定有參數(shù), 參數(shù)類型一定和需要設(shè)置的成員變量的類型一致, 并且參數(shù)名稱就是成員變量的名稱去掉下劃線
例子: - (void)setMin:(int)min
{
// setter方法還有一個(gè)好處: 監(jiān)聽屬性的變化
_min = min;
// 每次重新設(shè)置最小值, 那么就重新計(jì)算平均值
_average = (_min + _max) / 2;
}
getter方法:
作用: 獲取成員變量的值
格式:
- getter方法一定是對(duì)象方法
2.一定有返回值, 而且返回值一定和獲取的成員變量的類型一致
3.方法名稱就是獲取的成員變量的名稱去掉下劃線 - 一定沒(méi)有參數(shù)
只讀只寫私有屬性:
如果某一個(gè)屬性只提供了getter方法, 沒(méi)有提供setter方法, 我們稱這個(gè)屬性為只讀屬性
如果某一個(gè)屬性只提供了setter方法, 沒(méi)有提供getter方法, 我們稱這個(gè)屬性為只寫屬性
如果某一個(gè)屬性同時(shí)提供了setter方法和getter方法, 我們稱這個(gè)屬性為可讀可寫的屬性
如果某一個(gè)屬性沒(méi)有提供了getter和setter, 我們稱這個(gè)屬性為私有屬性
main.m
#import <Foundation/Foundation.h>
#import "Gun.h"
int main(int argc, const char * argv[]) {
Gun *gun = [Gun new];
[gun setSize:5];
NSLog(@"size = %i", [gun size]);
return 0;
}
Gun.h
#import <Foundation/Foundation.h>
@interface Gun : NSObject
{
int _bullet; // 子彈
/*
由于將來(lái)我們經(jīng)常需要定義一些方法來(lái)操作成員變量,而每個(gè)方法都必須有一個(gè)有意義的名稱,而想名字非常難,所以就有了getter-setter方法
getter-setter方法格式和寫法都是固定的,所以只要有g(shù)etter-setter方法我們就不用煞費(fèi)心思的去想方法名稱了,解決我們起名字難問(wèn)題
并且getter-setter方法還是程序員之間的一種規(guī)范,以后別人只要想給屬性賦值立刻就會(huì)想到getter-setter方法,這樣降低了程序員之間的溝通成本
*/
int _size; //尺寸
NSString *_model;//型號(hào)
int _color; //顏色
double _weight; // 重量
}
/**
* 射擊方法
*/
- (void)shoot;
// 提供一個(gè)方法用于設(shè)置成員變量的值
- (void)addBullet:(int)count;
// 提供一個(gè)方法用于返回成員變量的值
- (int)getBullet;
- (void)setSize:(int)size;
- (int)size;
@end
Gun.m
#import "Gun.h"
@implementation Gun
- (void)shoot
{
if (_bullet > 0) {
_bullet--;
NSLog(@"打了一槍 , 還剩%i顆子彈", _bullet);
}else{
NSLog(@"沒(méi)有子彈了");
}
}
// addBullet就是對(duì)成員變量的封裝
- (void)addBullet:(int)count // -100
{
/*
封裝: 屏蔽內(nèi)部實(shí)現(xiàn)的細(xì)節(jié), 僅僅對(duì)外提供共有的方法/接口
好處: 保證數(shù)據(jù)的安全性
將變化隔離
規(guī)范: 一般情況下不會(huì)對(duì)外直接暴露成員變量, 都會(huì)提供一些共有的方法進(jìn)行賦值
成員變量都需要封裝起來(lái)
*/
// 對(duì)傳入的數(shù)據(jù)進(jìn)行過(guò)濾
if (count < 0) {
count = 0;
}
_bullet = count;
}
- (int)getBullet
{
return _bullet;
}
- (void)setSize:(int)size;
{
//成員變量以下劃線開頭的好處,就是可以區(qū)分局部變量和成員變量
_size = size;
}
- (int)size
{
return _size;
}
@end