Object-c是基于引用计数的内存管理:就是说每个对象都要维护对象所有引用的计数值。当有一个新的引用指向对象时,计数值加1;
当删除一个指向对象的引用时,计数值减1.当计数值为0的时候,该对象会自动释放所占用的资源;
使用关键字来操作引用计数:
auto:创建对象,为对象分配内存,引用计数加1;
cope:复制一个对象,返回新的对象,引用计数加1;
retain:获取对象所有权,引用计数加1;
release:释放对象所有权,引用计数减1,当引用计数为0时,释放对象;
autorelease:将释放交给外部来实现;比如说函数返回一个新的对象时,不可能在函数内部释放对象,释放的话就不能返回了,所以交给外部程序来决定什么时候释放;
类:
1、类里面的成员默认是私有成员;
2、@interface:类的声明关键字,@implementation:代表实现
3、@synthesize:一般使用这个关键字声明类的成员变量,编译器会隐式的自动生成getter和setter,自动生成存取方法。这个关键字是跟property关键字一起使用
根据object-c的语言特性,写方法时,一般先在.h文件声明,.m文件实现。使用@property在.h文件声明,比如:@property(retain,nonatomic)NSString *test;
在.m文件实现,比如说:@synthesizetest;这样就已经实现了get,set方法。
@property()里面的关键字解释:
retain:将旧的对象的引用计数值赋予新的对象,然后新的对象的引用计数值再加1,释放旧的对象;
assign:简单复制,不更改引用计数值;
copy:建立一个计数值为1的新对象,释放旧对象;
nonatomic:假如使用atomic这个关键字声明代表变量是线程安全的,就是说当一个线程去写这个变量时,其他线程不能去读取。而这种机制是需要消耗很多资源的,
开发ios的话,为了提高资源利用率所以使用nonatomic关键字声明取消这种机制。
接口:
@protocol关键字声明,相当于java的interface;
函数:
减号标志类的函数方法; -(void)test;
+加号标志静态方法; +(void) test;
多参数:
-(返回值类型)函数名:(第一个参数类型)第一个参数名第二个参数的标志:(第二个参数类型)第二个参数名
如:-(int)test:(int) age second:(int) age1three:(int) age2