#import <Foundation/Foundation.h>
@interface Student :NSObject
{
//实例变量
NSString *_name;
NSInteger _age;
NSString *_companyAddress;
}
@propertyNSString *companyAddress;
//相当于声明了设置器和访问器
//设置器和访问器
-(void)setName:(NSString *)name;
-(NSString *)name;
-(void)setAge:(NSInteger)age;
-(NSInteger)age;
/*
设置器和访问器的作用
1.隐藏了实例变量
2.控制实例变量的读写
3.做正确性检验
对于设置器和访问器来说,其命名规则:
1.设置器:-(void)set首字母大写的实例变量名:(实例变量的返回值类型)去掉下划线的实例变量名
2.访问器:-(实例变量的返回值类型)去掉下划线的实例变量名
note:
对于类的名称,其首字母大写;
对于变量,其首字母小写;
遵循驼峰命名规则
缺点:
手动编写麻烦
*/
@end
#import "Student.h"
@implementation Student
-(void)setName:(NSString *)name{
//网络请求
_name = name;
}
-(NSString *)name{
return _name;
}
@synthesize companyAddress =_companyAddress;
//相当于设置器和访问器的实现,即setter与getter
@end
#import <Foundation/Foundation.h>
@interface NewStudent :NSObject
{
NSString *_name;
NSInteger _age;
}
@property (readonly)NSString *name;
@property (nonatomic,assign)NSInteger age;
@end
#import "NewStudent.h"
@implementation NewStudent
@synthesize name = _name;
@synthesize age = _age;
-(id)init{
if(self = [superinit]){
_name = @"XXX";
}
return self;
}
-(void)setAge:(NSInteger)age{
NSLog(@"你调用了我,%s",__FUNCTION__);//此处_FUNCTION_的作用为把函数名打印出来
if(age < 18){
_age = 18;
}else{
_age = age;
}
}
@end
#import "NewNewStudent.h"
#import <Foundation/Foundation.h>
@interface NewNewStudent :NSObject
{
}
/*
retain
copy
assign
strong
weak
如果是带*的一个对象类型,则可用retain,copy,strong
但如果是基本数据类型,如NSIteger,则用weak,assign
*/
//nonatomic:非多线程环境操作,atomic:多线程环境操作
//retain为内存管理的内容
@property (nonatomic,retain)NSString *name;
@property (nonatomic,assign)NSInteger age;
@end
#import "NewNewStudent.h"
@implementation NewNewStudent
//@synthesize name = _name;
//@synthesize age = _age;
//此处把@synthesize注释掉了,这时候系统会为我们自动产生以下划线开头的变量.所以在类实现文件的内部我们需要用_name来代替name,用_age来代替age.
@end
#import <Foundation/Foundation.h>
#import "Student.h"
#import "NewStudent.h"
#import "NewNewStudent.h"
int main(int argc,const char * argv[])
{
@autoreleasepool {
Student *stu = [Studentnew];
[stu setCompanyAddress:@"adsf"];
NSLog(@"%@",[stucompanyAddress]);
stu.companyAddress =@"zcx";
NSLog(@"%@",stu.companyAddress);
NewStudent *nstu = [NewStudentnew];
//nstu.name = @"XXX";
nstu.age = 17;
NSLog(@"%@,%ld岁",nstu.name,nstu.age);
NewNewStudent *nnstu = [NewNewStudentnew];
nnstu.name =@"XXX";
nnstu.age = 20;
NSLog(@"%@,%ld",nnstu.name,nnstu.age);
}
return 0;
}