8、使用@property声明一个属性,编译器会自动生成该属性的getter和setter方法的声明 在xcode4.5以后版本的编译器环境中,会自动在.m文件中生成该属性getter和setter方法的标准实现,不需显示声明用@synthesize来生成属性的getter和setter方法实现。
9、@property属性参数
1> nonatomic : 多线程环境下,不需要线程保护(读写时不加锁),
atomic : (默认)多线程环境下需要线程保护(读写时加锁).
2> readonly : 表示在.m文件中只生成属性的getter方法的实现
readwriter : 表示在.m文件中生成属性的getter和setter方法的实现(默认)
3> retain : 表示调用该属性的setter方法时,先release旧的值,再retain新的值。一般声明的成员变量是NSObject的子类才会添加该参数
assign : 生成标准的getter和setter方法实现(默认),直接给属性赋值
4> getter= : 表示自定义属性生成的getter方法名称
setter= : 表示自定义属性生成的setter方法名称
10、方法调用
* [实例对象 方法名:参数列表]
* [类名 方法名:参数列表]
例:
Student *stu = [[[Student alloc]init]autorelease];
[stu setAge:22 andNo:10];// 调用实例方法
[Student initWithAge:20];// 调用静态方法
11、点(.)语法
Student *stu = [[[Student alloc]init]autorelease];
stu.age = 20; // 相当于调用了对象的setAge方法(写)
int age = stu.age;// 相当于调用了对象的getAge方法(读)
12、self关键字
相当于java中的this,不同的是self在不同的环境下,作用也不同。在实例方法中self可以当该对象使用,在静态方法中,self可以当类对象使用。
如:
- (void)age {
return self.age;// 这里self是实例对象本身
}
+ (id)newInstace {
//Student *stu = [[[Student alloc]init]autorelease]; Student *stu = [[[self alloc]init]autorelease];// 这一句和上一句代码的效果是等效的,而在java语法是不允许this出现在静态方法中的 return stu;
}
13、@class : 在头文件中声明一个类的存在 为了提高效率,在只需要知道类的存在的情况下,不需要导入某个类的头文件。 // #import "Book.h"
@class Book; // 不需要导入Book.h头文件,在.m文件真正使用的时候再导入
@interface Student : NSObject
@property Book *book;
@end
14、@protocol : 在头文件中声明一个协议的存在 目的和@class一样
15、^ : 定义一个Block类型,与标准C语法中指向函数指针类型的写法非常相似
如:定义一个sum的Block类型,返回值为int,有两个int形参
int (^sum) (int, int) = ^(int a, int b) {
return a + b; };
16、#import : 用于导入一个类的头文件
#pragma mark : 写方法的注释
#pragma mark - : 方法注释分组
+ : 声明或定义一个静态方法
- : 声明或定义一个实例方法
|