我的iOS学习历程 - OC第二天
今天主要讲的是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);