属性的声明:用@property (copy,nonatomic) NSString * name;
int等基本类型的用assign;对象类型的用retain。
使用属性:直接用点“.”调用。(若是成员变量用->调用)
@property可以帮助自动生成访问器。
@synthesize 组合属性,生成相应的访问器和成员变量。
@property NSString* name;//就相当于
-(void) setName:(NSString *)name; -(NSString*) name;
属性说明的作用:访问控制、线程安全、内存控制。使用访问器可以达到数据安全。
访问控制
readwrite 说明了属性是可读写的。
readonly 说明属性是只读的,也就是只会生成访问器
getter=函数名 为属性访问器指定函数
setter=函数名 为属性设置器指定函数 线程安全
nonatomic ⾮非原⼦子性,不保证多线程安全
atomic 原⼦子性,多线程访问时较安全 内存管理
copy 制作⼀一个值的副本,传⼊入到成员变量
assign 默认值,直接赋值,不关⼼心内存管理
retain 关⼼心内存管理
strong 新加⼊入的关键字
//使⽤用set访问器设置年龄
[stu setAge:-200];//stu->age = -200;
对象的使用
对象的定义: 1.内存分配 --为对象动态分配内存地址
2.初始化 -- 在内存中填上的初始值
Student * stu=[Student alloc]
说明:向类发送alloc消息,就是为该类分配一块 足够大内存,用于存放实例变量,同时初始化内 存
int | float | BOOL | 指针 |
0 | 0 | NO | nil |
stu=[stu init];
初始化 -- 在内存中填上的初始值
自定义初始化:
-(id) initWithAge : (int ) age
andName: (NSString *) name
{
self=[super init];//调用父类的构造器
if(self){
self.age=age;
self.name=name;
}
return self;
}
Student *stu = [[Student alloc] initWithAge : 1 andName:@"李四"];//初始化赋值
便利构造器:
+(id) studentWithAge : (int ) age
andName: (NSString *) name
{
Student *stu = [Student alloc] initWithAge : 1 andName:@"李四"];
return stu;
}
Student *stu = [Student studentWithAge : 1 andName:@"李四"];
self:代表指向当前实例对象的指针
super:代表指向父类对象的指针