1、点语法
2、成员变量的作用域
3、 @property和@synthesize
点语法
点语法的本质还是方法调用
1 Person *p = [Person new]; 2 p.age = 10;//点语法 3 p.name = @"li si";//点语法 4 //[p setName:@"zhang san"]; 5 //[p setAge:20]; 6 NSLog(@"name is %@,age is %d",[p name],[p age]);
输出是 2015-04-17 11:02:02.456 oc_test1[1348:83501] name is li si,age is 10
使用注意,如果 再方法中使用self语句如下,则会进入死循环。
1 #pragma mark 年龄的set方法 2 - (void)setAge:(int)age 3 { 4 _age = age; 5 // 死循环 6 // self.age = age; 7 } 8 - (int)age 9 { 10 // 死循环 11 // return self.age; 12 return _age; 13 }
成员变量的作用域
默认是protected
@public 在任何地方都可以访问对象的成员变量
@private 只能在当前类的对象方法中直接访问(@implementation中默认是private)
@protected 只能在当前类和子类的对象方法中直接访问
@package 只要处在同一个框架中就能直接访问对象的成员变量
OC都是单继承。
@property和@synthesize
@property:自动生成某个成员变量的setter和getter声明
@property int age;//自动生成setter和getter的声明
@synthesize 自动生成setter和getter的实现,并且访问对应的成员变量
@synthesize age;// 如果这样写默认会自动访问成员变量age,而不是_age;;如果没有age则自动生成@private类型的成员变量age
1 // @synthesize 自动生成setter和getter的实现 2 @synthesize age = _age,name = _name; // 可以连着写
简单写法
@property int age;
这句话在新版Xcode会自动生成成员变量getter和setter的声明和实现,并且会自动生成一个@private类型的成员变量_age;
1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 // @property 自动生成setter和getter声明 5 @property int age; // 这句话在新版Xcode会自动生成成员变量getter和setter的声明和实现,并且会自动生成一个@private类型的成员变量 6 @end
1 #import "Person.h" 2 3 @implementation Person 4 @end
使用方法如下:
1 #import <Foundation/Foundation.h> 2 #import "Person.h" 3 4 int main(int argc, const char * argv[]) 5 { 6 Person *p = [Person new]; //新建对象 7 p.age = 10; // set方法 8 9 NSLog(@"age is %d",p.age); // get方法 10 11 return 0; 12 }
其他注意事项
1、@synthesize age;
如果这样写默认会自动访问成员变量age,而不是_age;;如果没有age自动生成@private类型的成员变量age.
1 @implementation Person 2 @synthesize age; // 如果这样写默认会自动访问成员变量age,而不是_age;如果没有age自动生成@private类型的成员变量age 3 @end
2、如果自己写得有setter或者getter方法,那么就不会自动生成,只会生成不存在的setter和getter方法。
时间: 2024-11-11 00:44:02