[BS-21] 关于OC中对象与指针的思考】的更多相关文章

关于OC中对象与指针的思考 1. 创建对象: OC中可通过代码Person *p = [[Person alloc] init];创建了一个对象p.该过程中内存情况为: 在当前线程的栈(默认1M)中,存在一个(Person *)类型的变量p,因为C语言中前面带*的变量都是指针变量,故也可理解为栈中有一个Person数据类型的指针变量p(p是指针,p不光自己有地址,它4B大小的空间中存储着别的变量的地址). 同时在ios系统管理的堆中(所有app共享)通过alloc分配了一块能装下Person数据…
OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC更偏向于Java这种方式,OC中如果一个对象需要被拷贝,他需要实现协议:<NSCopying>.<NSMutableCopying>从名字上我们可以看到,一个协议是用于不可变对象的,一个协议适用于可变对象的 首先来介绍一下对象的拷贝的概念吧:为什么要由对象的拷贝这么一个概念呢?看一个场…
涉及到内存管理问题的都是类类型的变量,而在OC中我们操纵这些对象都是通过操纵指向他们的指针来完成的,一致很多时候会忽略指针存在.比如定义UIView * view = [[UIView alloc]init];然后我们会使用view这个指针来做许多的操作.而由指针带来的一个性质是,当view == nil的时候,是指view这个指针没有指向任何地方,不能代表view指向地方的值是空的.同样当view不为nil的时候,值说明它指向了一个地方,而不能说明它指向的地方有值.僵尸指针就是这样情况,比如:…
OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc]  view plaincopy 1. //   2. //  main.m   3. //  26_NSArrayMemeryManager   4. //   5. //  Created by jiangwei on 14-10-12.   6. //  Copyright (c) 2014年 jiangwei. All rights reserve…
周末与一个老朋友吃饭聊天,因为他正在培训班学习iOS开发,就随便聊了几句,发现自己OC基础上的欠缺和一些知识点的混淆.特此整理如下. 1.空指针 没有存储任何内存地址的指针就称为空指针(NULL指针) 空指针就是没有被具体初始化之前,其值为0的指针 来两个例子 Person *p1 = nil; Person *p2 = NULL; 下边会给出nil和NULL的区别 2.野指针 “野指针”不是空指针,野指针是指向了一块不可用的内存地址的指针,也就是说,野指针内是有保存一个内存地址的值,但是,指向…
在OC中,self是一个指针,方法和属性可以通过self.function进行访问:成员变量使用self->变量名进行访问.调用方法还可以用[self function]; OC中的self有点类似java中this,但不尽相同,this可以访问类的所有成员,通过self也可以访问类的大部分成员,但是使用方法不尽相同.…
编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.另外还有啥链接器.汇编器.为了了便于理解我们可以统称为编译器) 那编译时就是简单的作一些翻译工作,比如检查老兄你有没有粗心写错啥关键字了啊.有啥词法分析,语法分析之类的过程.就像个老师检查学生的作文中有没有错别字和病句一样.如果发现啥错误编译器就告诉你.如果你…
在.m文件中使用对象方法: - (id)init { _name =@"zhangsan"; _age = 18; return self; } 然后通过main方法中进行创建对象并初始化:例如: Person *p1 = [[Person alloc] init]; 类方法alloc是分配内存空间,对象方法init是初始化.        …
周所周知,我们在做项目时, 可以在类的.m文件中重写该类的对象的描述description方法: 示例: -(NSString *)description{    NSString *str = [NSString stringWithFormat:@"name:%@ age:%d sex:%@",_name,_age,_sex];    return str;} 注意: 重写description方法的陷阱 千万不要在description方法中同时使用%@和self,下面的写法是错…
nil:指向OC中对象的空指针 e.g.: NSString *string = nil; Nil:指向OC中类的空指针    e.g.:Class class = Nil; NULL:指向其他类型的空指针 e.g.:int a = NULL; NSNull:OC中的对象,表示空值; 注:nil是一个对象,NULL是一个值 nil是将对象设置为空,NULL是将基本类型设置为空 e.g. (1) class *object = nil;  [object message];  result:NO…