• 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+左剪头:快速回到主文件

  • 相关阅读:
    java 自定义异常输出信息(使用构造器)
    idea 项目java版本选项位置
    编译、安装rdesktop 1.8.3
    ubuntu下编译源码 make 出现 make: 'Makefile' is up to date.
    ubuntu 图形化界面 gui 桌面版 root登录 sorry,that didn't work.please try again! 抱歉,认证失败。请重试
    MIUI 10 已连接 但无法访问互联网 的解决方案
    idea中 和outline相似的功能
    idea web项目debug模式实时更新按钮不生效原因
    javaweb学习总结二(静态导入、自动拆装箱、增强for与可变参数)
    javaweb学习总结一(eclipse常用快捷键、debug调试以及junit测试框架)
  • 原文地址:https://www.cnblogs.com/yangmx/p/3485165.html
Copyright © 2020-2023  润新知