1、assign、retain、copy使用环境
assign适合于基础类型,基础类型有c语言基础数据类型(int, float, double, char,bool),obc基础数据类型(NSInteger,CGFloat)
copy适合于NSString
retain适合于继承NSObject的对象,包括NSNumber(只有NSNumber能存放在NSMutableArray),需要手动release
2、为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain
3、nil表示一个Objctive-C对象,这个对象的指针指向空,类似于c语言的NULL,Nil定义的是一个指向空的类(是Class非对象)
id是一个指向任何一个继承了Object(或者NSObject)类的对象,id本身是一个指针,id *id则定义了一个指针,这个指针指向另一个指针
4、Xcode有四种build for
char 16 8
int 32 16(有符号:-32768至32767,无符号:0至65535)
short 16 16(类似int)
long 64 32(有符号:-2147483648至2147483627,无符号:0至4294967295)
float 32 32(类似无符号long)
double 64 64
longdouble - 128
6、
http://mobile.51cto.com/iphone-278593.htm
打包
Object-C内存管理口诀
1
1.1
例如,你在一个函数中alloc生成了一个对象,且这个对象只在这个函数中被使用,那么你必须在这个函数中调用release或autorelease。如果你在一个class的某个方法中alloc一个成员对象,且没有调用autorelease,那么你需要在这个类的dealloc方法中调用release;如果调用了autorelease,那么在dealloc方法中什么都不需要做。
1.2
1.3
2
范式就是模板,就是依葫芦画瓢。由于不同人有不同的理解和习惯,我总结的范式不一定适合所有人,但我能保证照着这样做不会出问题。
2.1
ClassA *obj1 = [[ClassA alloc] init];
2.2
ClassA *obj1 = [[[ClassA alloc] init] autorelease];
2.3
[obj1 release];
obj1 = nil;
2.4
ClassA *obj2 = obj1;
[obj2 retain];
//do something
[obj2 release];
obj2 = nil;
2.5
ClassA *Func1()
{
}
2.6
-(void) dealloc
{
}
2.7
2.7.1
ClassB *objB;
2.7.2
@property (retain) ClassB* objB;
2.7.3
@synthesize objB;
2.7.4
self.objB 或者objA.objB
2.7.5
[objB release];
示例代码如下(详细代码请参考附件中的memman-property.m,你需要特别留意对象是在何时被销毁的。):
@interface ClassA : NSObject
{
}
@property (retain) ClassB* objB;
@end
@implementation ClassA
@synthesize objB;
-(void) dealloc
{
}
@end
2.7.6
void funcNoAutorelease()
{
}
void funcAutorelease()
{
}
另外:http://blog.sina.com.cn/s/blog_6abfa7ce0100vc26.html
http://www.cnblogs.com/woainilsr/archive/2012/03/28/2421881.html
http://www.cocoachina.com/applenews/devnews/2012/1126/5178.html