-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
-----------并不是生来就是大神、代码量决定一切、其他都是假象、-----------
成员变量的作用域
1. 成员变量的作用域有以下四种
(1)@public:任何地方都能直接访问对象的成员变量
(2)@private:只能在当前类的对象方法中直接访问
(3)protected:能在当前类和子类的对象方法中直接访问
(4)package:只要处在同一框架中,就能直接访问对象的成员变量
2. 如果什么都不写,默认为@protected
3. 方法实现中(.m文件)也可以定义成员变量,默认为@private(因为main函数中只包含.h文件,而且定义的成员变量不能和 @interface中同名)
4. @interface和@implementation中不能声明同名的成员变量
5. OC为单继承,一个类只能继承一个父类
父类(超类)superclass
子类 subclass
@property和@synthesize
1. @property用在@interface中,会自动生成某个成员变量的set和get方法的声明和实现,并且生成了_age这个成员变量
@interface Person:NSObject
{
int _age
}
@property int age //相当于-(void)setAge : (int)age; -(int)age;
2. @synthesize用在@implementation中,会自动生成某个成员变量的set和get方法的实现,并且访问_age这个成员变量
@implementation Person
@synthesize age=_age
//@synthesize age=_age 相当于
-(void)setAge:(int)age;
{
_age=age;
}
-(int)age;
{
return _age;
}
3. 如果只写了@synthesize age,默认访问age这个成员变量,如果没有age这个成员变量,会生成age这个成员变量
4. @synthesize age=_age 访问的是_age这个成员变量
5. 如果一个类没有定义成员变量,@synthesize age=_age会自动生成@private类型的_age变量
6. XCODE4.4之后,@property可以同时生成set和get方法的声明和实现
*结论: @property可以替代@synthesize,生成成员变量,并且生成了set和get方法的声明和实现
7. 写了@property,若自己定义了set方法,编译器只会生成get方法和成员变量
写了@property,若自己定义了get方法,编译器只会生成set方法和成员变量
写了@property,若自己定义了set和get方法,编译器就不会生成不存在的成员变量