您的位置:首页 > 职场人生

黑马程序员_OC学习之@property、点语法

2014-06-24 23:05 375 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

一、点语法:通过"."调用类中的set和get方法来设置和访问成员变量

例如:

<span style="font-size:18px;">#import <Foundation/Foundation.h>

@interface Person : NSObject
{
@private
int _age;
@public
int _id;
}

- (int)age;
- (void)setAge:(int)age;
@end

@implementation Person
- (int)age {
return _age;
}
- (void)setAge:(int)age {
if(age < 0) {
age = 1;
}
_age = age;
}
@end

@interface Student : Person

@end

@implementation Student

@end

int main() {

Person *p = [Student new];  //学生同时也是人
p.age = 10; //这句话等同于[p setAge]
NSLog(@"%d",p.age); //OC会自动检测是访问还是设置成员变量,这里为访问所以等同于[p age];

return 0;
}</span>



注意:使用点语法设置成员变量在许多语言中都存在,不过在oc中,点语法不是直接操纵成员变量,而是调用set和get方法。
----------------------------------------------------------------------------------------------------------------------------------------------------------

二、@property:与@synthesize共用,让OC自动生成get和set方法,在xcode4.4以后,@synthesize功能已经被@property取代,不过还有一个功能,我们通过例子来介绍。
4000

先说下@property三个功能:1、声明一个成员变量的get和set方法;

2、实现该成员变量的get和set方法;

3、如果这个成员变量没有定义,那么会自动生成一个以下划线"_"开头的变量(默认是访问属性为@private);

例如:

<span style="font-size:18px;">#import <Foundation/Foundation.h>

@interface Person : NSObject
{
//    int _age; //如果没有定义该成员变量,那么会自动生成这个名字的成员变量。
int age; //如果变量名字这样命名,那么@property会不清楚使用这个变量还是_age这个变量,这时我们就要使用@synthesize来帮助@property取消歧义。
}
@property int age;  //等同于下面两句
//- (int)age;
//- (void)setAge:(int)age;
@end

@implementation Person

@synthesize age = age;  //指明使用age这个变量,而不是生成_age

@end

int main() {

Person *p = [Person new];
p.age = 10;
NSLog(@"%d",p.age);

return 0;
}</span>


注意:使用@property可以帮助我们省掉许多不必要的代码,但是如果我们想让某个类的子类访问该类的成员变量,就必须自己定义变量,而不用@property生成,因为它生成的是具有@private属性的成员变量。

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息