#import <Foundation/Foundation.h>
@interface Student : NSObject
//新建一个类Student
//设置器,访问器,成员变量以后可以用属性代替
//属性的关键词是:property
//如:
@property NSString *name;
@property NSInteger age;
@property CGFloat score;
-(void)eat;
//属性的作用
/*
1.它定义了一个成员变量,成员变量命名是 _+属性名
2.属性生命力饿setter和getter方法;
3.实现了setter和getter方法;
属性的属性:
1.具有读写性:就是对设置器和访问器进行控制,默认是可读可写,readwrite
readonly:只读,被它修饰的属性只有getter方法,没有setter方法;
*/
//如:
@property(setter= guodegang:)NSString *str;
@property(readonly,getter=是我哈)NSString *str1;
//getter=method相当于给getter方法重新起一个名;
//当设置setter的时候,别忘了新的名字后面加上一个:(冒号);
//2.原子性设置
//nonatomic,atomic,默认是atomic,可以保证在多线程情况下,访问数据,安全性,但是我们一般只是普通的赋值,打开线程锁反而浪费资源,所以一般我们填nonatomic
@property(nonatomic)NSString *hobby;
//3.语义设置
/*
1.assign:一般基本数据类型使用assign,比如NSInteger,CGFloat等,这部分内容不需要管理内存;
2.retain:一般的对象类型,比如我们自己定义的类,系统提供的想数组等对象,都需要通过retain进行修饰;
3.copy:目前,只有NSString使用copy;
*/
//@property(nonatomic,copy)NSString *color;
//@property(nonatomic,copy)NSString *stu ;//自定义的用retain;
//@property(nonatomic,retain)NSArray *arr;
//@property(nonatomic,assign)NSInteger a;
@property (nonatomic, copy)NSString *clor;
@property (nonatomic,copy)NSString *brand;
@property (nonatomic,assign)CGFloat price;
@property (nonatomic,assign)NSInteger speed;
//简单来说就是字符串用copy,自定义用retain,基本数据类型(NSInteger,CGFloat)用assign;
/*
1.便利构造器
便利构造器就是在初始化方法的基础上,封装了对象的创建过程;
便利构造器是"+"方法,返回本类型,方法名以类名开头
可以有多个参数,在内部封装了alloc和初始化方法,使用起来更加简洁
*/
//初始化方法和便利构造器是相对应的;
//如:先创建一个初始化方法:
-(id)initWithClor:(NSString *)clor
brand:(NSString *)brand
price:(CGFloat)price
speed:(NSInteger)speed;
//遍历构造器:
+(id)studentWithClor:(NSString *)clor
brand:(NSString *)brand
price:(CGFloat)price
speed:(NSInteger)speed;
#import "Student.h"
@implementation Student
@synthesize name =_name;
//作用是在老的版本的xcode里,声明了一个成员变量,新版本里不需要写,如果在以后碰见,不用管;
-(void)eat{
NSLog(@"%@",_name);//_name是成员变量;
}
-(id)initWithClor:(NSString *)clor
brand:(NSString *)brand
price:(CGFloat)price
speed:(NSInteger)speed{
self=[super init];
if (self) {
_brand =brand;
_clor =clor;
_price =price;
_speed =speed;
}
return self;
}
//便利构造器
+(id)studentWithClor:(NSString *)clor
brand:(NSString *)brand
price:(CGFloat)price
speed:(NSInteger)speed{
Student *ca =[[Student alloc]initWithClor:clor
brand:brand
price:price
speed:speed];
return ca;
}
#import "Student.h"
@implementation Student
@synthesize name =_name;
//作用是在老的版本的xcode里,声明了一个成员变量,新版本里不需要写,如果在以后碰见,不用管;
-(void)eat{
NSLog(@"%@",_name);//_name是成员变量;
}
-(id)initWithClor:(NSString *)clor
brand:(NSString *)brand
price:(CGFloat)price
speed:(NSInteger)speed{
self=[super init];
if (self) {
_brand =brand;
_clor =clor;
_price =price;
_speed =speed;
}
return self;
}
//便利构造器
+(id)studentWithClor:(NSString *)clor
brand:(NSString *)brand
price:(CGFloat)price
speed:(NSInteger)speed{
Student *ca =[[Student alloc]initWithClor:clor
brand:brand
price:price
speed:speed];
return ca;
}
@end