内存管理 对象的初始化及比较 对象内容的描述

1.init

2.load load只要类所在的文件被引用就会被调用,所有如果类没有被引用进项目,就不会有load调用

3.initialize 是在类或者其子类的第一个方法被调用前调用,即使类文件被引用进来,但是没有使用,那么initialize也不会被调用。

4.new  是alloc init的组合

//
//  main.m
//  内存管理
#import <Foundation/Foundation.h>
#import "Person.h"
//ARC自动管理内存
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.alloc分配内存
        Person *per = [[Person alloc]init];

        //2.清楚内存
        // C malloc free c++ 构造函数 析构函数 java GC
        //OC  引用计数 (+1) alloc new rerain copy = +1
        //release释放
        //retainCount 计数

        NSUInteger count = per.retainCount;
        NSLog(@"count=%lu",count); // 1
        [per release];
         per=nil;
        count = [per retainCount];
        NSLog(@"%lu",count);
    }
    return 0;
}

对象的比较

hash 比较isEqual 还比较哈希值

isEqualto 自己制定规则 调用isEqual

compare 字典的顺序

-(BOOL)isEqualTo:(id)object{ //制定比较规则
    Person *per = (Person *)object;//转换成Person类型的
    return [per.name isEqualTo:self.name]&&per.age==self.age; name和age都相等
}

查看类中的对象内容的描述

     Person *per = [[Person alloc]init];
        per.name = @"xiaowang";
        per.age = 18;
//查看类中的对象内容的描述
        NSLog(@"%@",per);

-(NSString*)description{ //类的一个描述
    return [NSString stringWithFormat:@"[%@,%d]",self.name,self.age];
}
2015-12-12 13:15:07.627 内存管理[745:44892] [xiaowang,18]
时间: 2024-10-04 16:18:53

内存管理 对象的初始化及比较 对象内容的描述的相关文章

Linux0.11内核--内存管理之1.初始化

[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5597705.html ] Linux内核因为使用了内存分页机制,所以相对来说好理解些.因为内存分页就是为了方便管理内存. 说到内存分页,最根部的要属页目录表了,head.h中: extern unsigned long pg_dir[1024]; // 内存页目录数组.每个目录项为4 字节.从物理地址0 开始. 然后再看head.s: /* * head.s 含有32 位启动代码. * 注意

【cocos2d-x 3.x 学习笔记】对象内存管理

内存管理 内存管理一直是一个不易处理的问题,开发者必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完毕后有效地释放内存,即管理对象的生命周期.由于C++是一个较为底层的语言,其设计上不包含任何智能管理内存的机制.一个对象在使用完毕后必须被回收,然而在复杂的程序中,对象所有权在不同程序片段间传递或共享,使得确定回收的时机十分困难,因此内存管理成为了程序员十分头疼的问题. 另一方面,过于零散的对象分配回收可能导致堆中的内存碎片化,降低内存的

启动期间的内存管理之初始化过程概述----Linux内存管理(九)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 在内存管理的上下文中, 初始化(initialization)可以有多种含义. 在许多CPU上, 必须显式设置适用于Linux内核的内存模型. 例如在x86_32上需要切换到保护模式, 然后内核才能检测到可用内存和寄存器. 而我们今天要讲的boot阶段就是系统初始化阶段使用的内存分配器. 1 前景回顾 1.1

内存管理初始化源码4:add_active_range

我们在阅读源码时,函数功能可以分为两类:1. bootmem.c 2. page_alloc.c. 1. bootmem.c是关于bootmem allocator的,上篇文章已经简述过. 2. page_alloc.c是关于Memory Management subsystem的. 关于内存管理子系统的初始化调用了多个函数,我们首先分析在bootmem_init中调用的add_active_range函数. start_kernel --> setup_arch ---> arch_mem_

java基础-对象的初始化

一 前言 本节内容将会提到方法重载,对象的初始化,对象的构造器,和this关键字的使用,以及会简要的概括一下java中对象回收机制.觉得文章不错的读者可以关注一下作者的博客和公众号(同博客名称) 二 方法重载 2.1 方法重载的定义 方法重载是指同名的方法具有不同的参数列表:不同的参数列表是指参数列表个数不同或者相同的个数的参数,但具有不同的参数类型: 代码示例: /** * @Author lsc * <p> 方法重载</p> */ public class OverLoadZ

OC -内存管理

管理内存有三种方式 1:垃圾回收,在java中常见的管理内存方法,系统自动检测对象是否被使用,是否被释放 2.MRC: 手动管理引用计数,iOS管理内存的方式,程序员通过手动方式来管理对象是否被释放 3.ARC: 自动管理引用计数:基于MRC,系统自动的管理内存 引用计数:retainCount 当我们使用一个指针指向一块内存的时候,应该对这块内存做retain操作,引用计数+1.当我们不再使用这个指针指向这块内存,应该对这块内存做release操作,引用计数-1.这样可以使引用计数值一直保持等

内存管理01

今天学习了OC中的内存管理,老师说这是OC中最重要的一块. 内存简单地说就是存储程序和数据的地方,有了它,程序才能在电脑和手机上正常运行. 主要来说内存分为五大区: 1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.     2.堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回    收   .    3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的    全局变量和静

【IOS学习基础】内存管理

1.内存几大区域 1> 栈区:局部变量(基本数据类型.指针变量). 2> 堆区:程序运行的过程中动态分配的存储空间(创建的对象). 3> BSS段:没有初始化的全局变量和静态变量. 4> 数据区:已经初始化的全局变量和静态变量.(字符串常量) 5> 代码段:程序编译后的代码的内容. 2.引用计数器 1> 引用计数器:每个继承自NSObject的对象都有一个引用计数器,用来表示当前对象有几个拥有者. 2> 引用计数器的作用:用来判断对象是否应该回收. 3> 引

iOS技术面试02:内存管理

怎么保证多人开发进行内存泄露的检查. 如何定位内存泄露? 1> 使用Analyze进行代码的静态分析(检测有无潜在的内存泄露) 2> 通过leak检查在程序运行过程中有无内存泄露 3> 为避免不必要的麻烦, 多人开发时尽量使用ARC 2.非自动内存管理情况下怎么做单例模式. 创建单例设计模式的基本步骤 · >声明一个单件对象的静态实例,并初始化为nil. >创建一个类的类工厂方法,当且仅当这个类的实例为nil时生成一个该类的实例 >实现NScopying协议, 覆盖al