今天主要講的是set,get方法,description自定義拼接還有複合
複合的在文件裏有一個經典例子
@interface Person :NSObject
1.實例變量可見度
默認是受保護的只能是本類和子類去使用(一般使用)
@public公開的可以在類的外面進行使用
@private私有的只能是本類來使用
可以有三種可見度
@protected受保護的
NSString *_name;
@public
NSString *_gander;
@private
NSInteger _age;
}
2.方法名
首先把方法類型刪掉再刪掉返回值類型還刪參數類型和後面的參數名刪完就是這個方法的方法名
注意:冒號是標識有參數不能刪掉
<span style="font-size:18px;">- (instancetype)initWithName:(NSString *)name
gander:(NSString *)gander
age:(NSInteger)age;</span>
聲明一個類方法
+(void)sayHi;
需求:便攜方法取出實例變量name的值
- (NSString *)name;// getter方法
需求:更改實例變量name的值
</pre></p><pre name="code" class="objc"><span style="font-size:18px;">- (void)setName:(NSString *)name;// setter方法每個實例變量都需要進行取值賦值方法的聲明實現
- (NSString *)gander;
- (void)setGander:(NSString *)gander;
- (NSInteger)age;
- (void)setAge:(NSInteger)age;
-(void)setNameGander:(NSString *)name : (NSString *)gander;
- (NSString *)description;</span>
@end
#import"Person.h"
@implementation Person
<span style="font-size:18px;">-(instancetype)initWithName:(NSString *)name
gander:(NSString *)gander
age:(NSInteger)age
{
_name = name;
_gander = gander;
_age = age;
returnself;
}</span>
1.聲明一個類方法
類方法是直接使用類名去調用這時是沒有對象創建出來的實例變量是依託與對象而存在
對象都沒有就不能使用實例變量
注:類方法中不能直接使用實例變量(思考如何在類方法中使用實例變量)
+(void)sayHi{
NSLog(@"我是Person的類方法");
NSLog(@"%@",_name);
}
需求:便攜方法取出實例變量name的值
-(NSString *)name{
return_name;
}
需求:更改實例變量name的值
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)gander{
return_gander;
}
- (void)setGander:(NSString *)gander{
_gander = gander;
}
- (NSInteger)age{
return_age;
}
- (void)setAge:(NSInteger)age{
_age = age;
}
-(void)setNameGander:(NSString *)name :(NSString *)gander{
_name = name;
_gander = gander;
}
直接用%@打印對象的時候
實際上是調用了父類中的方法
3.如果想按自己的意願輸出信息的話需要重寫父類的方法
-(NSString *)description{
// 格式拼接字符串
NSString *str = [NSStringstringWithFormat:@"姓名:%@性格:%@ 年齡:%ld",_name,_gander, _age];
return str;
}
#import<Foundation/Foundation.h>
#import"Person.h"
#import"MobilePhone.h"
int main(int argc,const char * argv[]) {
// 調用類方法
[Person sayHi];
Person *p = [[Person alloc]initWithName:@"周杰倫" gander:@"男" age:18];
NSString *_name = [p name];
NSLog(@"%@",_name);
[p setName:@"王龍"];
NSLog(@"%@",[p name]);
[p setNameGander:@"jay" :@"男"];
NSLog(@"%@ %@",[p name],[p gander]);
NSLog(@"%@",p);
MobilePhone *p2 = [[MobilePhonealloc]initWithType:@"iPhone"color:@"灰色"system:@"ios9.1"];
NSLog(@"%@",p2);