Objective-C面向对象的特性
面向对象最重要的概念就是类,通过类可以实现面向对象两个主要的特性:继承和聚合
NSObject是所有类的根类
1.类的定义
都在 .h文件中进行,典型的定义如下
@interface FirstViewController : UIViewController
{
NSString *name;
NSArray *array;
...
}
@property(nonatomic,retain)NSString *name;
@property(nonatomic,retain)NSString *array;
-(id)initWithName:(NSString*)string;
...
@end
(1)类的定义由@interface开始,到@end结束
(2)类名后面紧跟冒号和所继承的父类名
(3)花括号里定义类的成员变量
(4)属性由@property关键字声明
(5)方法声明在成员声明之后,@end之前
2.方法
方法类似函数,由返回值,方法名,参数列表组成。返回值与参数类型使用圆括号括住,有几个参数方法名就被分成几个部分,每个部分都有一个冒号,冒号后面才是参数类型和参数,方法前面有个方法类型符,+表示类方法,-表示实例方法。例如
-(id)initWithName:(NSString*)string withArray:(NSArray*)arr;
实例方法必须通过类的实例调用,类方法可由类直接调用。类似(java中的static方法)
上面方法有两个参数,因此方法由两部分组成initWithName:和withArray
Objective-C中还存在可变参数的概念比如说NSString的stringWithFormat方法:
+(id)stringWithFormat:(NSString*)format,...;
第二个参数就是 一个可变参数,这样的参数并不知道具体的类型,也不知道参数的数目,这些都要通过前面已经知道的format来确定
3.属性
Objective-C在将实例变量声明为属性的时候,首先要声明实例变量,然后用@property关键字,如上面的那个name。
然后在.m文件中使用@synthesize<属性名>;语句。就会自动生成get与set方法
nonatomic关键字的意思是非原子的,意思就是非线程安全,若两个线程同时操作一个读取,一个修改,属性值是不一样的,我们依然使用这个属性的原因是,必须保证我们不会在多线程下使用该属性,使用非原子属性我们会得到更好的性能。
retain说的是属性在赋值之后在对象销毁之前都是可用的,这涉及到了内存的管理,以后再说。
此外还有readonly和readwrite只读和可读可写。