zoukankan      html  css  js  c++  java
  • 内存管理范围和@property

    管理范围: 

    管理任何继承NSObject的对象,对其他的基本数据类型无 效 

    本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于 栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指 向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄 露。 

    page8image376.png 

    内存管理的原则 

    1)原则 

    只要还有人在使用某个对象,那么这个对象就不会被回收; 只要你想使用这个对象,那么就应该让这个对象的引用计数器+1; 当你不想使用这个对象时,应该让对象的引用计数器-1; 

    2)谁创建,release 

    (1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者 autorelease方法
    (2)不是你创建的就不用你去负责 

    3)retain,release 

    只要你调用了retain,无论这个对象时如何生成的,你都要调用release 

    4)总结 

    有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1. 

    1)空指针:没有指向任何东西的指针,给空指针发送消息不会报错 关于nil和Nil及NULL的区别: 

    nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值。
    Nil: A null pointer to an Objective-C class

    NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NULL是一个通用指针(泛型指针)。 

    NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values). 

    [NSNull null]: The singleton instance of NSNull. 

    [NSNull null]是一个对象,他用在不能使用nil的场合。 

    @property 

    @property int age; 1)生成一个_age 2)生成get和set方法的声明 3)生成 get和set方法的实现 

    @property (......) int age; 

    page35image4472.png 

    1)内存管理相关参数 

    retain:对对象release旧值,retain新值(适用于OC对象类型) assign:直接赋值(默认,适用于非oc对象类型) copy:release旧值,copy新值 

    验证assign如果作用在对象上,实际上就是直接赋值 //使用@property增强型 生成get和set方法 

    @property(nonatomic,assign)Car *car; /* 

    .m文件中实际上生成的是
    _car = car; //当对象release后,将无法使用该对象 

    */ 

    page36image5672.png 

    @property 参数(二) 

    1)是否要生成set方法(若为只读属性,则不生成

    readonly:只读,只会生成getter的声明和实现 readwrite:默认的,同时生成setter和getter的声明和实现 

    2)多线程管理(苹果在一定程度上屏蔽了多线程操作

    nonatomic:高性能,一般使用这个 atomic:低性能,默认 

    3)setget方法的名称 

    修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用 在布尔类型中的getter。 

    @property(nonatomic,assign, setter=abc:,getter=haha)int age 可以理解为把[psetAge:]------>[pabc:], [page] --------->[phaha]; 

    @property(nonatomic,assign, setter=setVip:,getter=isVip) BOOL vip; 

  • 相关阅读:
    fzuoj Problem 2177 ytaaa
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Capture the Flag
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Team Formation
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Beauty of Array
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Lunch Time
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Convert QWERTY to Dvorak
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest May Day Holiday
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Demacia of the Ancients
    zjuoj The 12th Zhejiang Provincial Collegiate Programming Contest Ace of Aces
    csuoj 1335: 高桥和低桥
  • 原文地址:https://www.cnblogs.com/ljcgood66/p/5295772.html
Copyright © 2011-2022 走看看