新手,大神们请指教!
昨天学习了类的声明和其成员变量的定义,初始化。我们发现对象的创建和使用是很麻烦的,而且,成员变量我们得声明@public,这对我们的类是不安全的。
设置器getter是用来取值,访问器setter是用来赋值,通过get和set来操作对象是很麻烦的。
我们通过声明属性@property和实现文件中的@synthesize结合来完成setter和getter方法的创建。
一 已经创建号类Student1
1⃣类的名首字母大写,大括号内是成员变量的声明(其实根本不需要声明了,可以直接删除大括号及其内容);
2⃣@property (retain,nonatomic)NSString *name;这条语句是声明属性name,是之前学的set语句的简化
//-(void) setName:(Nsstring*) newname
//-(Nsstring) name;
如果我们删掉大括号,属性声明后,笔者认为系统已经产生了成员,例如_age
我把@synthesize注释掉,发现age提示错误,如果改成_age,编译通过。顺便提示下,大括号内标准的成员声明应该是
NSString *_name这种格式
setName是一个函数,它的作用就是赋值。用冒号来表示它参数(int) newname。一会main函数里会调用这个函数,请注意。
另外三条语句雷同。
二有了属性的声明就该有东西来实现它
@synthesize的作用就是,通知编译器自动为我们创建setter和getter方法。
比如@synthesize name就跟下面的语句功能相同
-(void) setName:(Nsstring*) newname
{name=newname;}//用函数setName赋值
-(Nsstring*)name
{return name;}
我们也可以写成@synthesize name=name,address=address,age=age,hobby=hobby;
三有了声明跟实现,我们就该调用它
输出结果是
我们注意到boy.age=24和[boy setHobby:@弹棉花"]两种方法都可以赋值
其实boy.age不是结构体的调用成员变量,点在这里是调用set方法(文章开头已经提到后面会调用),就跟[boy setHobby:@弹棉花"]一样,
最后我们发现@property和@synthesize更简洁