OC-核心语法1

1. 点语法:对象调用方法

上述完整方法为- (void)setAge:(int)age;
1> 如何判断set和get方法:
如果赋值,则是set方法。
eg:stu.age = 10;
否则是get方法。
eg : int age = stu.age;
2>注意:一定要与访问成员变量区分:
访问成员变量:p->_age;

2.成员变量作用域

@public:任何地方都可以直接访问(任何地方直接访问)
直接访问:p->_age=20;
@private:只能在当前类的对象中访问(当前类的对象直接访问,成员属性属于哪个类,则只有那个类可以访问)
eg:

@interface Person : NSObject  // 声明Person类  
{  
     @private  
     int _age; // _age属性只能被Person类访问  
}  
- (void)setAge:(int)age; // age属性的setter和getter方法  
- (int)age;  
@end  
@implementation Person  // 实现Person类  
- (void)setAge:(int)age  
{  
     _age=age;  
}   
- (int)age  
{  
     return _age;  
}  
@end  
@interface Student : Person (定义student类,继承Person类)  
- (void)study; // 声明学习的方法  
@end  
@implementation Student  // 实现Student类  
- (void)study  
{  
     [self setAge:20]; // 通过setter方法访问父类的私有对象  
}  
@end

注意点:如果子类访问此属性,则只能通过setter和getter方法访问。
@protected:可以在当前类以及子类中对象访问(当前类和子类的对象直接访问,默认)
@package:在同一框架中可以访问,介于@private和@public之间
注:
(1)在@interface声明中自定义变量类型是 @protected
(2)在@implementation实现中自定义变量类型是@private

@implementation Person  
{  
     int _age; // 此对象是私有的  
}  
@end

(3)@implementation不能定义和@interface同名的成员变量

3.@property 和 @synthesize

1>@property:
可以自动生成某个成员变量的setter和getter的方法声明
eg:@property int age; // 会自动生成_age成员变量
// int是get方法的返回值类型和set方法的形参类型。 age是set形参名和get的方法名
自动生成 - (void)setAge:(int)age;

  • (int)age;

2>@synthesize
自动生成set方法和get方法的实现,并且会访问_age这个成员变量
eg:@synthesize age = _age; // 代表形参age会访问_age这个成员变量,如果无_age,则会自动生成
@synthesize age; // 代表默认访问age成员变量,如果没有,则自动生成age成员变量
//如果_age在类中不存在,则会自动生成@private类的age
注:1.如果手动实现了setter方法,则编译器就只会自动生成getter方法
如果手动实现了getter方法,则编译器自动生成setter方法方法

3>注意点
(1)方法调用时,会优先调用手工编写的方法,如果没找到再调用自动生成的方法。
(2)@property会自动生成_成员变量名。
eg: @property age; // 自动生成_age,类型是@private;
@synthesize 会自动生成 成员变量名。
eg: @synthesize age; // 自动生成age,类型是@provate;
(3)重点例子:

@interface Person : NSObject // 声明Person类
@property int age; 
@end
@implementation Person
@end

解析:@property int age代码有如下三个作用:
1>生成_age成员变量。
2>声明 _age成员变量的setter和getter方法
3>实现_age成员变量的setter和getter方法

4. id

概念:万能指针,能指向或操作任何OC对象。(已经包含了* ,在调用时不需要加*)
相当于NSObject *

eg: id d= [student new]; // 使用student类创建对象d
或者 NSObject *d = [student new]; // 多态语法

posted @ 2015-07-09 07:24  wlv587  阅读(148)  评论(0编辑  收藏  举报