内存分配
下面举个例子说明下:
NSString* string;
string = [[NSString alloc] initWithString:@"hello ios"];
- 这里string其实就是一个指针,OC中除了基本数据类型之外的变量类型都是指针类型,OC对象都是通过指针进行操作的。
- 第一段代码定义了NSString类型的指针变量,但是没有指向任何对象。第二段alloc一个NSString对象,并将string指向它。
- 这里string的内存空间是栈空间,“hello ios”的内存空间是堆空间。
@interface C: NSObject
{
int a;int b;
}
@end
int main(int argc, const char *argv[])
{
C *c1 = [[C alloc]init];
C *c2 = [[C alloc]init];
}
oc中创建的对象指针存储在栈内存中,而alloc出来的对象的内存在堆内存中,栈内存中的指针通过赋值指向堆内存中的对象,然后通过栈内存中的指针访问对象及其变量,也就是说,其实我们在创建一个对象时其实是利用了两个部分的内存空间。(注意基本类型是由系统自己管理的,放在栈上)