zoukankan      html  css  js  c++  java
  • 03-OC实例方法、内存管理

    目录:

    一、实例方法和类方法

    二、工厂方法

    三、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手动内存管理

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

    *创建对象时(alloc、new),此时设置引用计数器为1

    *当你需要使用一个别人创建好的对象时,为了防止在使用此对象期间别人释放了这个对象,我们要将此对象的引用计数器加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+左剪头:快速回到主文件

  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/yangmx/p/3485165.html
Copyright © 2011-2022 走看看