OC中的属性、方法及内存管理

普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量。-(void)show;输出 … 访问属性
    属性:属性专门处理实例变量。(程序执行过程当中)
    初始化方法:一创建对象(第一时间),给实例变量赋值。
    工厂方法:只一个方法,帮我们解决创建对象问题、初始化对象的问题。工厂方法创建对象最简单。(对象达到一定量级)

补:在类方法中,可以调用类中创建的实例的实例方法或实例变量。

算法、设计模式:
是人们总结的一种规律,一种思想。

1.单例模式
    是一种特殊的工厂方法。
    “单例”:只有一个唯一的。
    单例模式的好处,节约资源、提高效率、统一管理。
2.内存管理
    iOS开发中,对堆内存的创建、销毁(释放),就叫做内存管理。
    内存管理有两种方式:
        MRC:手动内存管理。
        ARC:自动内存管理。

引用计数器:用来记录对象被引用的次数,每个对象天生就有一个引用计数器。
        Reference Counting
    引用的次数:一个对象被几个引用使用。
    TRStudent *stu = [[TRStudent alloc]init];
    TRStudent *stu2 = stu;
    在xcode5以后,都是强制使用ARC内存管理的。
    需要手动改成MRC内存管理:
        项目->BuildSetting->All->ARC->OC language->OC ARC=NO;
    强制操作系统立刻回收内存:
        edit scheme->Diag…->Enable Zombie Objects
    
    内存管理的机制:
        每个对象都有自己的引用计数器。        在MRC内存管理模式下,引用计数器计算机是无法自动操作的。
        向对象发送[对象 retainCount];该对象引用计数器的值
        当向对象发送alloc、copy、new消息的时候,该对象的引用计数器会自动设置为1.
        当不再使用对象的时候的时候,会发送release消息,通知引用计数器”减”1。
        当一个对象的引用计数器的值为0时,”系统”会”自动”销毁该对象,并回收该内存空间。
        当对象销毁的时候,会”自动”发送dealloc消息。
        
        内存管理使用不当:            通过引用使用一个以经不存在的对象(堆空间),会出现异常、crash(Exception)。
            解决:1.野指针问题,使用空指针来解决野指针问题。
            对象不在使用的时候,忘记发送release消息,内存溢出(内存浪费)(内存泄露)。
                            2.多个引用使用同一个对象,需要retain操作。
            解决:1.谁创建的内存(谁加1),谁就有责任减1。
                           2.声明式属性解决加1操作,但减1操作依然需要手动处理。
        
        new相当于
             [TRStudent new] 相当于 [[TRStudent alloc]init]

.m文件中的dealloc方法
        -(void)dealloc{
            NSLog(…);
            [super dealloc];
        }

3.声明式属性
  a.默认情况下 声明式属性 并没有解决内存问题
  b.如果需要解决内存问题 需要加上(retain)
      @property(retain) TRBook* book;
  c.声明式属性解决的只有setter/getter问题 加1操作
  d.dealloc中减1操作 依然需要我们自己做。
    如果一个对象中的属性是对象类型,声明式属性记得加retain关键字修饰
    当一个对象销毁的时候,应该将其拥有的属性对象,全部release
    [email protected](参数类型1,参数类型2)
        参数类型1:
            retain:修饰属性是对象类型
            assign:修饰基本数据类型,默认是assign类型
            copy:修饰一些特殊的对象类型,NSString
            readonly:只有getter方法,没有setter方法。
            readwrite:有setter方法,也有getter方法。
            getter=method:可以修改getter方法的方法名。
            setter=method:可以修饰setter方法的方法名。
        参数类型2:(多线程)
            atomic 原子性操作 解决线程安全问题 消耗资源 默认值
            nonatomic 非原子性操作 存在线程安全问题 节省资源
4.自动释放池
    a.自动释放池可以帮我们解决自动释放(release)对象的操作。    b.工厂方法存在内存释放的问题、getter内存释放的问题、创建多个对象的时候,容易忘记释放对象。
    c.语法规则 :
        @autoreleasepool{
        }
    d.默认情况下,自动释放池不会管理对象,需要手动将对象放到自动释放池中,由自动释放池管理对象。
    e.向对象发送autorelease消息,就可以将对象放到自动释放池中管理。
    f.自动释放池的开始、结束
        autorealespool{开始
            。。。
        }结束
        当自动释放池结束的时候,会向池中的对象发送release消息

时间: 2024-10-25 07:52:47

OC中的属性、方法及内存管理的相关文章

七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 [email protected]参数 [email protected]和循环retain的使用 6.NSString的内存管理

1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程序闪退. 2.OC内存管理的范围 : 管理任何继承NSObject的对象,对其他的基本数据类型无效. 3.对象类型是程序运行过程中动态分配的,存储在堆区:内存管理主要是对 堆区中的对象的内存管理. 4.OC内存管理的原理 为了防止内存泄露 对象的引用计数器 : 每个OC对象都有自己的引用计数器,是一

OC中的属性特征

在刚开始学习oc的过程中,一直对声明完返回值后的属性特征不咋明白啥意思,今天特地找了一下资料,彻底的明白其中的意思. oc中的属性特征主要有assign,copy,retain这三个主要的,还有readonly,readwrite.   另外,atomic和nonatomic:以及strong,weak. assign主要是针对基础类型数据和c数据类型的简单赋值,而且它不调用索引计数器(retain count). retain主要是指调用oc中的对象,对oc中的对象进行赋值(主要针对NSObj

小白学开发(iOS)OC_ set方法的内存管理分析(2015-08-04)

// //  main.m //  set方法的内存管理分析 // //  Created by admin on 15/8/5. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { //p 

OC中的内省方法初探

内省(Introspection)是对象揭示自己作为一个运行时对象的详细信息的一种能力.NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别. 在iOS开发过程中,有效的使用内省方法.有助于避免错误地进行消息派发.错误地假设对象相等.以及类似的问题.明智地使用内省可以使面向对象的程序更加高效和强壮. OC中的内省方法有: 1,isKindOfClass:检查本实例对象,是否是某个类的对象,包括继承的子类. 2,isMemberOfClass:检查本实例对象,

js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas

OC --(9)-- 内存管理初级:内存管理的方式、引用计数机制,影响计数的各个方法、dealloc方法、内存管理的基本原则、掌握copy的实现

iOS应?程序出现Crash(闪退),90%以上的原因是内存问题. 在一个拥有数十个甚?至是上百个类的?程里,查找内存问题极其困难. 了解内存常?问题,能帮我们减少出错几率. 内存问题体现在两个方面:内存溢出.野指针异常. 1.野指针异常 内存管理的方式 引用计数 影响引用计数的方法有 +alloc -retain -copy -release -autorelease

个人总结诀窍----oc中对象作为方法连续,重点也是难点.

相信有不少初学者,oc中的对象作为方法连续传递在一两个对象的时候可能还好,多了可能就绕晕了...我接下来就分享一下我个人对这一块的知识的总结或心得或诀窍吧. 我觉得用"螳螂捕蝉黄雀在后"比较形象,关键点就一环套一环,怎么去打比方还是看个人理解了... 举个例子:一个顾客要去一家餐馆吃饭,餐馆有厨师,厨师有食材.以上有对象分别为:顾客,餐馆,厨师,食材; 一.先来理解这2段关于顾客的代码. #import <Foundation/Foundation.h> #import &

OC中对于属性的总结(@property)

在没有属性之前: 对成员变量进行改动都要用到设置器:setter来改动 Person *per =[[Person alloc] init]; 对象通过设置器对成员变量内容进行修该 [per setName:@"你好"]; 要通过訪问器:getter来进行取值 属性的出现 ,简化了代码 1.属性 属性是写在.h中 在XCode4.5之后,属性一共能够做了三件事: 1.声明了设置器:setter和訪问器:getter 2.实现了设置器和訪问器 3.声明了一个成员变量,成员变量命名会在属性

Java中的垃圾回收机制&amp;内存管理

1. Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存. 为什么呢? 因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所使用的内存. 垃圾收集器是自动运行的,无须显式地请求垃圾收集器,程序运行时,垃圾收集器会不时检查对象的各个引用,并回收无引用对象所占用的内存. 可以调用System类中的静态gc()方法来运行垃圾收集器. 2. Java语言并不要求JVM有gc,也没有规定gc如何工作. Java垃圾回收机制是为所有