一:变量的作用域
默认是protected的
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
注意:私用方法的实现很简单,只需要实现在.m文件中,而没有在.h文件中声
二:self关键字
在对象方法中 self代表你这个当前对象,相当于java中的this
- (void)text1
{
int age = self.age;
}
在类方法中 self就代表这个类名,就是下面例子中调用text2这个方法的类
+ (void)text2
{
[Student alloc] = [self alloc]
}
//总结在一起 , 就是谁调用这个方法self就指向谁无论是类还是对象注意:不要在set,get中调用self,因为分辨不清楚容易造成死循环
三:new关键字
new相当于即分配了内存,又实现了init构造方法
Student *stu = [[Student alloc]init];
//相当于 Student *stu = [Student new];
我们现在一般用以前的语法,因为new是后来加入的,而且没有以前的语法层次清晰,
并且new的话没办法调用自己写的构造方法
四:@property和@synthesize
@property 关键字表示自动生成成员变量的set和get方法的声明,只用在@interface关键字里面
@property int age ;
//相当于
//-(void)setAge(int)age;
//-(int)age;
@synthesize 关键字表示自动生成实现成员变量的set和get方法的实现,可连着一起写只用在@implementation 关键字里面
@synthesize age ,name
@synthesize age;
/*
相当于
-(void)setAge(int)newAge
{
age = newAge;
}
*/
为了防止混淆我们可以写成这样
@synthesize age = _age;
注意!!!
1:编译器会先判断synthesize 关键字的存在,根据你定义的成员变量找同名的成员变量,具体如下
如果写了@synthesize age;那么成员变量 int age;就可以可以省略了,系统找不到同名的成员变量,会自动生成一个同名变量,并且是私有的,相当于在.m文件中加了一个int age;就像本例中如果现在你在.h中定义了一个_age的成员变量,没有定义age,但是synthsize中的成员变量你写的是age 那么自动生成的成员变量会是age而不是_age2:如果你写成了@synthesize age = _age ,编译器会找_age这个成员变量,如果找不到就会自动生成,只不过是私有的(看不懂这句可参考下面)
现在的新版本synthesize我们也不用写 ,只需要在.h中声明一个变量,实现方法会自动生成
/*
@property int age ;
不写synthesize方法会默认生成@synthesize age = _age;
所以说他会自动生成的成员变量是_age,但是是私有的,如果想变成公共的就需要在继承类后面的{}中声明一下
eg
{
int _age;
}
*/
总结:来说以后我们如果不确定的话最好不要在.h文件中把
{
int _age;
NSSting *_name;
}
省略,这样synthesize 就会调用你这里面的成员变量,然后这个@synthesize关键字一开始最好不要省略,当然根据需求set和get方法有时也需要手动写