作者:年轻的周末我做主 | 来源:互联网 | 2023-12-14 12:05
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。
[objc] view plaincopyprint?
- #import
- @interface Person : NSObject
- {
- int _age;
- int age;
-
- int _height;
- int height;
-
- int _weight;
- int weight;
-
- int _money;
- int money;
- }
-
- @property int age;
- @property int height;
- @property int weight;
- @property int money;
-
- - (void)test;
- @end
-
- @implementation Person
- @synthesize height = _height;
- @synthesize weight;
-
- - (void)setMoney:(int)money
- {
- self->money = money;
- }
-
- - (int)height
- {
- return180;
- }
-
- - (int)age
- {
- return age;
- }
-
- - (void)test
- {
- NSLog(@"age=%d, _age=%d, self.age=%d", age, _age,self.age);// 0,10,0
- NSLog(@", height, _height,self.height);// 0,160,180
- NSLog(@"weight=%d, _weight=%d, self.weight=%d", weight, _weight,self.weight);// 50,0,50
- NSLog(@"mOney=%d, _mOney=%d, self.mOney=%d", money, _money,self.money);// 2000,0,0
- }
- /*
- 分析:第一行是打印成员变量age,_age,self.age的值,这里self代表调用方法的执行者,在main函数中是p在调用这个方法所以self.age等价于p.age,而p.age就是_age的getter方法,由于我们自己写了_age的getter方法的实现,所以直接调用我们自己写的方法,这里写的是return age,所以返回的是成员变量age的值,如果改成return _age或者不写这个方法,那么就返回_age的值,在main函数中p.age =10,p.weight = 50等都是赋值给带下划线的成员变量,所以第一行输出:0,10,0
-
- 第二行写了@synthesize height = _height;,如果后面改成不带下划线height,那么当我们执行self.height时,会默认访问height这个成员变量,如果没有,则会自动创建@private类型的height成员变量,所以输出: 0,160,180
-
- 这里涉及到成员变量的作用域问题:
-
- @public : 在任何地方都能直接访问对象的成员变量
- @private : 只能在当前类的对象方法中直接访问 @implementation中默认是@private)
- @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
- @package : 只要处在同一个框架中,就能直接访问对象的成员变量
- 注意:@interface和@implementation中不能声明同名的成员变量
-
- 第三行写了个@synthesize weight;这个东西,这个东西代表默认访问weight这个成员变量而不是_weight这个成员变量,其他的跟上面原理一样,所以输出: 50,0,50
-
- 第四行写了
- - (void)setMoney:(int)money
- {
- self->money = money;
- }
- 这个是_money的setter方法的实现,所以当我们执行p.money = 2000的时候就会执行这段代码,self->money是将值赋给money这个成员变量,而不是_money这个成员变量,此时_money的值还是0,最后执行self.money是取出_money的值,所以最后的输出结果:2000 , 0, 0
-
- */
- @end
-
- int main()
- {
- Person *p = [Person new];
- p.age =10;
- p.weight =50;
- p.height =160;
- p.money =2000;
- [p test];
- return0;
- }
黑马程序员_OC学习笔记之@property和@synthesize,,
黑马程序员_OC学习笔记之@property和@synthesize