1. 类的动态方法里,self表示当前对象
- (void) test {
int age = self.age;
}
类的静态方法里,self表示当前类名
- (void) test {
[self alloc];
}
2. 直接将方法写在.m文件里,没有在.h文件中声明,属于私有方法,只能在类内部访问
3. @property 声明setter和getter方法,写在头文件里
@property int age
@synthesize 实现setter和getter方法,写在.m文件里
@synthesize age :@synthesize默认回去访问跟age同名的变量,如果没有该变量,则在内部生成一个私有同名变量
@synthesize age = _age :getter和setter方法关联的是成员变量_age
注:xcode4.5以后,不用的.m文件里写@synthesize,但在头文件里用@property声明的变量,会自动创建一个带下划线的私有同名变量
如果自己实现了getter和setter方法,则xcode不会自动生成@synthesize,也不会自动创建同名变量
4. NSLog(@"count is %zi",[stu retainCount]) :zi代表无符号整形
5.Student * stu =[ [ [Student alloc] init] autorelease] :自动释放对象
6.析构函数
- (void)dealloc{
[super dealloc];
}
7. 私有方法是将函数写在.m文件里面
8. 方法注释
单个注释: @pragma mark ...
归类注释: @pragma mark - ...
9. setter方法内存管理
- (void) setBook:(Book*)book{
if(_book != book){
[_book release];
_book = [book retain];
}
}
10. setter自动内存管理特性 ,retain参数
@property(retain) Book *book :加上(retain)属性,系统自动做setter内存管理,如同的.m文件里加上第9点的方法
即是:在settter方法中,自动release旧值,retain新值
注:继承了NSObject类的对象才需要做内存管理,才需要加参数retain,基本数据类型加retain会报错
11 @property(assgin) int age
默认值即是assign,写了等于没写,意思就是自动生成的setter方法直接赋值与_age成员变量,不做内存管理
12 @property参数分三类
(1)读写属性:readwrite/readonly //readonly代表只会生成getter方法,默认readwrite
(2)setter处理:assign/retain/copy//默认assign
(3)原子性:atomic/nonatomic//atomic代表线程安全,nonatomic非线程安全默认atomic
13 改变默认生成的getter方法名
@property (nonatomic, getter = isRich) BOOL //将getter方法名改为isRich
14 .自动释放池
Book *book = [ [ [Book alloc ] init ] autorelease ] // 一般而言,通过类的静态方法创建的类实例都不需要我们做内存管理
15. 分类 category
可以给任何类拓展方法
@interface NSString (Test) //Test为分类名称
+ (NSString*) json();
@end
@implemetation NSString (Test)
+ (NSString*) json(){
return @“ { ’name’ : ‘ LiLi’ , ‘ no ‘ : ‘ 10 ’ } “;
}
@end
使用:
#import “NSString+Test.h”
//NSString *str = [ [ [ NSString alloc] init ] autorelease ] ;
[NSString json];
16. protocol 相当于接口,声明的借口方法,继承的类不需要全部都实现
注意:如果要求必须实现,则在方法前面加上@required
@protocal Study<NSObject>
@required //以下方法必须实现
- (void)test;
- (void)test1;
@optional //可选,可以实现,也可以不实现
-(void)test2;
@end
17. 判断某个类是否实现了某接口的方法
BOOL b = [_delegate respondsToSelector:@selector(onClick:) ]; //判断_delegate是否实现了onClick:方法
18. 判断是否遵守了某个协议
BOOL b = [stu comformsToProtocol: @protocol(Study)]; //判断stu是否遵守了Study协议
19. 外部直接访问成员变了用 “->”
stu->height = 19;