目录:

一、实例方法和类方法

二、工厂方法

三、self

四、编程规范

五、内存管理

回到顶部

一、实例方法和类方法

1 只能通过实例调用的方法叫实例方法。"-"

2 只能通过类调用的方法叫类方法。"+"

3 实例方法和类方法的区别

*实例方法与实例有关系,所有实例方法可以调用、读取实例中的实例变量或属性。

*类方法与实例无关,所有类方法不可以调用、读取实例中实例变量或属性。

*在类方法中,可以创建对象,当然可以访问该对象的实例变量和属性。

*当前类(非实例对象)可以调用当前类的类方法,但是不可以调用当前类的实例方法。可以通过创建当前类的实例对象,去访问实例方法。

回到顶部

二、工厂方法

1 创建对象的方法叫工厂方法

2 在类中经常会出现一些工厂方法,其目的是为了方便创建对象。

3 规则:

*工厂方法是类方法

*工厂方法返回id类型,因为要返回一个刚创建好的对象,类似初始化的方法。

*工厂方法的方法名以类名开头,注意:去除前缀和首字母小写,比如:类名TRPerson,其工厂方法名就是person

练习:

1)创建一个point类,有横坐标x,纵坐标y,能显示位置(show方法),创建两个位置并显示。(属性,初始化方法(无参,有参),工厂方法(无参,有参))。

2)创建TRPerson类,有age,sex,salary,能显示信息的普通方法show,创建两个人,(属性,初始化方法(无参,有参),工厂方法(无参,有参))。

回到顶部

三、self

代表当前对象或当前类,在实例方法中,self代表当前对象,在类方法中,self代表当前类。

回到顶部

四、编程规范

1 标识符

标识符:给变量、函数、类、方法、常量等起名字。

*必须以_和字母开头

*只能包含数字,_和字母

*不能和关键字冲突

*大写写敏感

*长度是不限的

2 命名规范

*类,分类,扩展,协议等类型起名时,一般加前缀(2~3个字母组成),并且每个单词的首字母大写。

*驼峰标识:如果标识符由多个单词组成,每个单词的首字母要大写

*属性、方法、变量的首字母小写,其后的每个单词的首字母大写。

*常量一般大写,单词之间以"_"隔开,const int MAX_NUM = 10;

3 OC特有的代码风格

*无参的初始化方法,"init"命名,有参的以"initWith"开头

*工厂方法,无参的以小写的类命名,有参的以"小写类名With"开头

*一般方法的方法名不能以new开头,new开头的方法基本上是用来创建对象的。

4 补充

*代码的结构性,一定要缩进。(在Xcode环境下command+a全选,Ctrl+i自动代码缩进)

*当一个方法比较长时,可以用空行的方式,将方法分成几个模块

回到顶部

五、内存管理

1 进程空间

代码区:只读

堆区:自己创建,自己回收释放,对象是保存在堆区

全局区:进程启动时分配,进程结束时释放

栈区:局部变量,自动创建自动释放

内存管理:所谓的管理,就是内存的分配(创建)和释放(回收)

2 IOS的内存管理方式

MRC      Maual手动Reference(引用)Counting(计数器)

ARC      Automatic自动Reference(引用)Counting(计数器)

3 MRC手动内存管理

*每个对象都有自己的引用计数器,引用计数器是用来计算对象被引用的次数

*创建对象时(

*当你需要使用一个别人创建好的对象时,为了防止在使用此对象期间别人释放了这个对象,我们要将此对象的引用计数器加1,是由程序员通知引用计数器,只要给对象发送retain消息,引用计数器就会加1

*当你使用的对象不在使用时,你有责任通知引用计数器减1,发送release消息

*当对象的引用计数器为0时,说明已经没有任何引用指向对象,对象就会被系统销毁,系统销毁对象之前,会自动向对象发送一条消息"dealloc",然后对象所占空间就会被释放,千万不要自己去调用dealloc消息。

强制回收内存:点击run右边的项目名称,选择edit scheme -> Diagnostics -> 勾选object-c

*可以使用releaseCount查看计数器值

*当你指向的对象,不在使用时,如果忘了发送release消息,会造成内存泄露

*当引用指向对象,已经不存在销毁了,继续向对象发送消息,会发生问题,出现异常crash,这就是野指针,指向垃圾内存

*"野指针"不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。野指针是非常危险的。使用空指针可以解决野指针问题,在OC中向空指针发送消息什么也不做,但不会报错。注:Student* stu;//此时stu是空指针。

补充:创建一个指针变量,默认是nil,alloc之后,如果该指针是int类型,那么默认是0,

作业

1 两个引用公用一个对象

2 一个对象拥有一个对象

3 一个对象拥有一个对象之后换了已拥有的对象

Ctrl+command+左剪头:快速回到主文件

03-OC实例方法、内存管理的更多相关文章

  1. 12.Object-C--浅谈OC的内存管理机制

    昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...

  2. 黑马程序员——OC的内存管理学习小结

    内存管理在Objective-C中的重要性就像指针在C语言中的重要程序一样. 虽然作为一门高级语言,但OC却没有内存回收机制.这就需要开发者来对动态内存进行管理.OC中内存管理的范围是:任何继承了NS ...

  3. OC:内存管理、dealloc方法、copy知识点

    属性的声明:使⽤@property声明属性
 例如:@property NSString *name: 相当于@interface中声明了两个⽅法(setter.getter): 属性的实现:使⽤@s ...

  4. OC的内存管理机制

    总的来说OC有三种内存管理机制,下面将分别对这三种机制做简要的概述. 1.手动引用计数(Mannul Reference Counting-MRC) mannul:用手的,手工的. 引用计数:reta ...

  5. OC基础 内存管理

    OC基础  内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...

  6. OC的内存管理(一)

    在OC中当一个APP使用的内存超过20M,则系统会向该APP发送 Memory Warning消息,收到此消息后,需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等,否则程序会 ...

  7. 黑马程序员——OC语言 内存管理

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)计数器 每个对象内部都保存了一个与之相关联的整数,称为引用计数器,当 ...

  8. OC的内存管理

    摘自:http://blog.csdn.net/hahahacff/article/details/39839571 OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有 ...

  9. OC - 5.内存管理

    一.引用计数器 1> 栈和堆 栈 ① 主要存储局部变量 ② 内存自动回收 堆 ① 主要存储需要动态分配内存的变量 ② 需要手动回收内存,是OC内存管理的对象 2> 简介 作用 ① 表示对象 ...

  10. oc语言--内存管理

    一.基本原理 1.什么是内存管理 1> 移动设备的内存及其有限,每个app所能占用的内存是有限制的 2> 当app所占用的内存较多时,系统就会发出内存警告,这是需要回收一些不需要的内存空间 ...

随机推荐

  1. BFG

    "/"应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 提供程序集合中不 ...

  2. 本地存储sessionStorage 、 localStorage 、cookie整理

    sessionStorage . localStorage .cookie 的区别 sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可 ...

  3. 关闭Outlook的时候使之最小化

    Outlook很搓的一点就是只有按‘最小化’按钮的时候才会最小化到托盘,而按‘关闭’按钮Outlook直接被关闭退出.然后经常发现没邮件,结果是因为客户端关掉了. 下面通过插件方式实现关闭后最小化到托 ...

  4. STL之deque(双向队列)

    deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: deque在vector函数的基础上增 ...

  5. C# 模拟提交带附件(input type=file)的表单

    今天调用某API时,对于文档中的传入参数:File[] 类型,感觉很陌生,无从下手! 按通常的方式在json参数中加入file的二进制数据提交,一直报错(参数错误)!后来经过多方咨询,是要换一种 表单 ...

  6. php随笔7-thinkphp OA系统 JS 文本框输入实时控制字数

    JS: //多行文本输入框剩余字数计算 function checkMaxInput(obj, maxLen) { if (obj == null || obj == undefined || obj ...

  7. uoj #2 【NOI2014】起床困难综合症 贪心+位运算

    题目链接 给出n个数, 每个数有特定的一种操作, &|^三种, 给出一个m, 初始值属于[0,m],选定一个初始值, 使所有操作做完之后的值最大, 输出这个最大值. 1, 从最高位贪心, 如果 ...

  8. Xamarin.Android开发实践(二)

    原文:Xamarin.Android开发实践(二) 一.准备 开始学习本教程前必须先完成该教程http://www.cnblogs.com/yaozhenfa/p/xamarin_android_qu ...

  9. Ruby学习: 类的定义和实例变量

    ruby是完全面向对象的,所有的数据都是对象,没有独立在类外的方法,所有的方法都在类中定义的. 一.类的定义语法 类的定义以 class 关键字开头,后面跟类名,以 end标识符结尾. 类中的方法以 ...

  10. Vijos P1067Warcraft III 守望者的烦恼

    题目 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般 ...