黑马程序员——OC基础---基础语法(一)
------- android培训、ios培训、期待与您交流! ----------
内容概括:
1、点语法的使用。
2、成员变量的作用域。
3、@property和@synthesize的使用。
4、简化语法,和万能指针。
5、构造方法。
一、点语法
实质:点语法的本质就是方法调用。
例:创建一个person类,这个类有age属性,用它声明一个变量p,可用如下表示方法。
#import
@interface Person :NSObject
@property int age;
@end
@implementation Person
@end
int mani()
{
P.age = 18; // 等价于[ p setAge:18 ];
int a = p.age; // 等价于 int a = [p age];
}
注意:在set方法或get方法中使用同样含义的点语法,将导致死循环。
点语法只可调用set方法和get方法,其余不可调用。
二、成员变量的作用域
1、private 只能在当前类的实现@implementation中直接访问。
2、@protect 可以在当前类及子类的实现@implementation中直接访问。
3、@public 在任何地方都可以直接访问。
4、@package 同一个“体系”内可以直接访问,介于@private和@protect之间。
三、@property和@synthesize 的使用。
@property int age;
1、语句自动生成getter和setter的声明。
2、句中的age不是成员变量名,而是方法名。
@synthesize age = _age;
1、语句自动生成getter和setter的实现。
2、隐含的set实现语句_age = age,隐含的get实现语句 return _age。
3、语句中的_age是成员变量名。
示例:
#import
@interface Person : NSObject
{
int _no;
@public // 在任何地方都能直接访问对象的成员变量
int _age;
@private // 只能在当前类的对象方法中直接访问
int _height;
@protected // 能在当前类和子类的对象方法中直接访问
int _weight;
int _money;
}
注意:
1、声明在@interface中的成员变量默认作用域是@protect。
2、声明在@implementation中的成员变量默认作用于是@private。
3、在@interface中和@implementation中不可声明同名变量。
4、上述代码所说直接访问是指 p->age的方式直接访问。
四、简化写法,和万能指针
#import < foundation/foundation.h >
@interface Dog : NSObject
@property int age;
@end;
上述代码完成了三件事。
1、声明了一个名为_age的成员变量。
2、对_age的get方法和set方法做了声明。
3、对_age的get方法和set方法做了实现。
弊端:这种写法成员变量的作用于默认为private。
注意:Xcode特性
1、@synthesize age;语句没有声明访问的变量时,默认为访问与该名称一致的变量,如果这个变量不存在,就自动生成这个变量。
2、Xcode特性
@implementation
@end
1.没有set方法和get方法会自动生成该方法,并返回下划线开头的成员变量。
2.手动写了方法,或设置了变量,采用手动写的,否则自动生成。
万能指针;id:能指向\操作任何OC对象,相当于(NSObject *)。
总结:可用于指向所有类型的对象,应用于返回不同类型对象的函数。