zoukankan      html  css  js  c++  java
  • oc46--nonatomic, retain

    //
    //  Person.h
    
    #import <Foundation/Foundation.h>
    #import "Room.h"
    #import "Car.h"
    #import "Dog.h"
    
    @interface Person : NSObject
    {
        Room *_room;
        Car *_car;
        Dog *_dog;
    }
    /*
    - (void)setRoom:(Room *)room;
    - (void)setCar:(Car *)car;
    - (void)setDog:(Dog *)dog;
    
    - (Room *)room;
    - (Car *)car;
    - (Dog *)dog;
     */
    @property(nonatomic, retain) Room *room;//标准写法都是(nonatomic, retain)
    
    
    /*
     写了retain就可以生成:
     - (void)setRoom:(Room *)room
     {
         // 1.判断传入的对象和当前对象是否一样
         if (_room != room) {
             // 2.release以前的对象
             [_room release];
             // 3.retain传入的对象
             _room = [room retain];
         }
     }
     */
    
    
    
    
    
    /*
     readonly: 只会生成getter方法
     readwrite: 既会生成getter也会生成setter, 默认什么都不写就是readwrite
     
     getter: 可以给生成的getter方法起一个名称
     setter: 可以给生成的setter方法起一个名称
     
     retain: 就会自动帮我们生成getter/setter方法内存管理的代码,上次44,45的内容
     assign: 不会帮我们生成set方法内存管理的代码, 仅仅只会生成普通的getter/setter方法, 默认什么都不写就是assign。
     
     
     多线程
     atomic :性能低(默认)
     nonatomic :性能高
     在iOS开发中99.99%都是写nonatomic,因为手机性能低。 atomic用于pc开发中。
    */
    @end
    //
    //  Person.m
    
    
    #import "Person.h"
    
    @implementation Person
    
    /*
    - (void)setRoom:(Room *)room
    {
        // 1.判断传入的对象和当前对象是否一样
        if (_room != room) {
            // 2.release以前的对象
            [_room release];
            // 3.retain传入的对象
            _room = [room retain];
        }
    }
    - (void)setCar:(Car *)car
    {
        if (_car != car) {
            [_car release];
            _car = [car retain];
        }
    }
    - (void)setDog:(Dog *)dog
    {
        if (_dog != dog) {
            [_dog release];
            _dog = [dog retain];
        }
    }
    
    - (Room *)room
    {
        return _room;
    }
    - (Car *)car
    {
        return _car;
    }
    - (Dog *)dog
    {
        return _dog;
    }
     */
    
    
    - (void)dealloc
    {
        [_room release];
        [_car release];
        [_dog release];
        
        NSLog(@"%s", __func__);
        [super dealloc];
    }
    @end
    //
    //  main.m
    //  property修饰符
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
    
        Person *p = [Person new];
        
        Room *r = [Room new];
        
        /*
    //    Car *c =[Car new];
    //    Dog *d = [Dog new];
        
        
    //    p.room = r;
    //    p.car = c;
    //    p.dog = d;
        
    //    [d release];
    //    [c release];
    //    [r release];
    //    [p release];
         */
        
        p.room = r;
        [r release];
        
        
        // 换房了, 如果set方法中没有release旧值, 就会内存泄露
        Room *r2 = [Room new];
        p.room = r2;
        [r2 release];
        
        
        // 重复赋值
        p.room = r;
        
        [p release];
        return 0;
    }
  • 相关阅读:
    Smarty数学运算
    双引号里值的嵌入
    Smarty属性
    Smarty函数
    Smarty注释代码
    数据结构实验2——链表
    数据结构实验1——顺序表
    hdu 5459 Jesus Is Here
    hdu 5455 Fang Fang
    2018 多校6 hdu 6362 6370 6373
  • 原文地址:https://www.cnblogs.com/yaowen/p/7427849.html
Copyright © 2011-2022 走看看