码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员- oc中点语法和@property的使用

时间:2015-04-01 00:21:08      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

点语法

其实就是set方法和get方法

 

#import<Foundation/Foundation.h>

 

@interface Person : NSObject

{

int _age;

}

- (void)setAge:(int)age;

- (int)age;

@end

 

@implementation Person

 

- (void)setAge:(int)age

{

    _age = age;  

    // 会引发死循环

    //self.age = age; // [self setAge:age];

}

 

- (int)age

{

return _age;

    // 会引发死循环

    //return self.age;// [self age];

}

@end

int main()

{

    Person *p = [Person new];

 

    // 点语法的本质还是方法调用

p.age = 10; // [p setAge:10];

 

int a = p.age; // [p age];

 

NSLog(@"%d", a);

 

return 0;

}

 

 

成员变量的作用域

@public : 在任何地方都能直接访问对象的成员变量

 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

 @protected : 可以在当前类及其子类的对象方法中直接访问(@interface中默认就是@protected)

 @package : 只要处在同一个框架中,就能直接访问对象的成员变量 //很少用

 

@interface和@implementation中不能声明同名的成员变量

 

@property  @synthesize

 

@property会自动生成set方法和get方法

#import<Foundation/Foundation.h>

 

@interface Person : NSObject

{

int _age;

NSString *_name;

}

 

// @property:可以自动生成某个成员变量的setter和getter声明

 

@propertyint age;

//相当于下面两行代码

//- (void)setAge:(int)age;

//- (int)age;

 

@propertyNSString *name;

 

@end

 

在实现中

@implementation Person

 

// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量

 

@synthesize age = _age;

@synthesize name = _name;

 

@end

 

 

@synthesize height = _height;  会访问height这个成员变量,如果不存在,会自动生成@private了类型的成员变量(@private,子类不能访问)

缺点:成员变量变成私有的,如果想子类访问,提前定义成员变量

 

 

其实通过@property int height;

就可以

生成get方法和set方法

生成 _height成员变量

生成get方法和set方法的实现

 

@property 独揽了@synthesize的功能,

如果在声明由set方法那么只会帮助实现get方法,如果是手动实现的,编译器不会帮助自动生成

 

 

 

黑马程序员- oc中点语法和@property的使用

标签:

原文地址:http://www.cnblogs.com/lxiaohei103/p/4382424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!