• Objective-C的内存管理


    原则

     内存管理原则:
     1.谁使的引用计数增加,那他也要负责对应的引用计数减少(类似C++,谁new谁delete)
     2.可以对nil的对象release(类似c++允许delete的对象为NULL一样)
     3.当对象引用计数为0时,系统会自动释放该内存
     4.可以借用C++内存管理的经验来控制Objective-C的内存管理
     
    • MemoryDemo.h
       1 //  MemoryDemo.h
       2 //  MemoryTest
       3 //
       4 //  Created by arbboter on 14/11/28.
       5 //  Copyright (c) 2014ๅนด arbboter. All rights reserved.
       6 //
       7 
       8 #import <Foundation/Foundation.h>
       9 
      10 @interface MemoryDemo : NSObject
      11 {
      12     NSString*       _objectName;
      13     int             _objectCount;
      14 }
      15 
      16 -(void)setObjectName:(NSString*)name;
      17 -(NSString*)getObjectName;
      18 
      19 -(void)setObjectCount:(int)count;
      20 -(int)getObjectCount;
      21 
      22 -(void)showInfo;
      23 
      24 -(void)dealloc;
    • MemoryDemo.m

       1 //
       2 //  MemoryDemo.m
       3 //  MemoryTest
       4 //
       5 //  Created by arbboter on 14/11/28.
       6 //  Copyright (c) 2014年 arbboter. All rights reserved.
       7 //
       8 
       9 #import "MemoryDemo.h"
      10 
      11 @implementation MemoryDemo
      12 
      13 -(void)setObjectName:(NSString*)name
      14 {
      15     /* 对象重复不予重置 */
      16     if (name != _objectName)
      17     {
      18 #if 1
      19         /* 标准做法 */
      20         [name retain];
      21         [_objectName release];
      22         _objectName = [[NSString alloc] initWithString:name];
      23         [name release];
      24 #else
      25         /* 另一种思路,没想到会出什么问题 */
      26         [_objectName  release];
      27         _objectName = [name retain];
      28 #endif
      29         
      30     }
      31 }
      32 
      33 -(NSString*)getObjectName
      34 {
      35     return _objectName;
      36 }
      37 
      38 -(void)setObjectCount:(int)count
      39 {
      40     _objectCount = count;
      41 }
      42 -(int)getObjectCount
      43 {
      44     return _objectCount;
      45 }
      46 -(void)showInfo
      47 {
      48     NSLog(@"name = %@, count = %d", [self getObjectName], [self getObjectCount]);
      49 }
      50 
      51 -(void)dealloc
      52 {
      53     [_objectName release];
      54     [super dealloc];
      55 }
      56 
      57 @end
    • main.m

       1 //
       2 //  main.m
       3 //  MemoryTest
       4 //
       5 //  Created by arbboter on 14/11/28.
       6 //  Copyright (c) 2014年 arbboter. All rights reserved.
       7 //
       8 
       9 #import <Foundation/Foundation.h>
      10 #import "MemoryDemo.h"
      11 int main(int argc, const char * argv[])
      12 {
      13     NSString* name = [[NSString alloc] initWithString:@"Man of pig's feet"];
      14     NSString* nullName = nil;
      15     MemoryDemo* mem = [[MemoryDemo alloc] init];
      16     
      17     /* nil 允许retian,也允许release */
      18     [nullName retain];
      19     [mem setObjectName:name];
      20     [mem setObjectCount:18];
      21     [mem showInfo];
      22     
      23     // release
      24     [name release];
      25     /* nil 允许retian,也允许release */
      26     [nullName release];
      27     
      28     // OK!
      29     [mem showInfo];
      30     
      31     [mem release];
      32 
      33 #if 0
      34     /* error, mem's value is not nil but
      35      * mem's retain count alreadly to be 0
      36      */
      37     [mem release];
      38 #endif
      39     
      40     return 0;
      41 }
      42 
      43 /**
      44  * 内存管理原则:
      45  * 1.谁使的引用计数增加,那他也要负责对应的引用计数减少(类似C++,谁new谁delete)
      46  * 2.可以对nil的对象release(类似c++允许delete的对象为NULL一样)
      47  * 3.当对象引用计数为0时,系统会自动释放该内存
      48  * 4.可以借用C++内存管理的经验来控制Objective-C的内存管理
      49  */
  • 相关阅读:
    MYSQL基础02DML操作数据8
    MYSQL基础02SQL5
    SpringSecurity权限管理系统实战—四、整合SpringSecurity(上)
    SpringSecurity权限管理系统实战—三、主要页面及接口实现
    SpringSecurity权限管理系统实战—九、数据权限的配置
    SpringSecurity权限管理系统实战—八、AOP 记录用户、异常日志
    SpringSecurity权限管理系统实战—六、SpringSecurity整合JWT
    SpringSecurity权限管理系统实战—二、日志、接口文档等实现
    SpringSecurity权限管理系统实战—五、整合SpringSecurity(下)
    SpringSecurity权限管理系统实战—七、处理一些问题
  • 原文地址:https://www.cnblogs.com/arbboter/p/4128754.html
Copyright © 2020-2023  润新知