我们先看一个实例变量imgv的初始化:
UIImageView * imgv=[[UIImageView alloc]init];
imgv是指针,指针指向的是对象。
[[UIImageView alloc]init]; 创建了一个对象
imgv = 写在前面,等于把imgv指向了那个对象。所以imgv是指针
而对象藏在内存的某个角落里面,需要通过指针来访问
指针指向了对象在内存中的一个地址,通过这个指针找到内存中的对象(通过指针来找到对象而不是表示对象)
本质上讲:类是一种指针类型的变量,上述定义的UIImageView* 类型只是存放一个地址值,它指向实际的UIImageView对象,而真正对UIImageView对象则存放堆(heap)内存中。(所有对象都只能通过指针变量来访问它们。)
堆内存中可以有多个指针,即多个指针指向同一对象。
NSMutableString *str = [@"string1" mutableCopy];
NSMutableString *str2 = str;
[str appendString:@"__str"];
[str appendString:@"__str2"];
NSLog(@"str1:%@ str2:%@",str,str2);
//输出:str1:string1__str__str2 str2:string1__str__str2
NSLog(@"str1:%X str2:%X",str,str2);
//输出:str1:B3D96B60 str2:B3D96B60
- 如果堆内存里的对象没有任何变量指向该对象,那么程序就无法访问该对象,就要释放内存,否则就造成内存泄漏。