zoukankan      html  css  js  c++  java
  • ObjectiveC 内存管理 迎客

    > 需要手动维护的对象是Foundation提供类的对象和用户自定义类的对象。其实就是NSObject的子类。

    NSInteger和CGFloat不需要手动回收,因为他们只是用defined定义的某基本类型的别名。

    > 需要回收和对象引用计数值会大于零。当引用计数值减于零时,会除释放。

    > 对象执行autorelease方法,可以将该对象加入当前所在回收池(NSAutoreleasePool)中。

    > 自动释放池(NSAutoreleasePool)对象执行drain操作时,会将加入该池里自动回收的对象引用计数减掉该对象在这个池里执行autorelease的次数。

    > 可以将一个对象加到多个自动释放池中。

    > 对象执行一次release方法,就会将引用计数减1。

    > 只有用[[Class alloc] initXXX]方式声明的对象才需要用[object release]方法释放一次。

    > 在我们自定义Class时也应该满足上一条件。

    > 我们自定义Class时,对于需要维护类型的对象属性,在@property定义属性时,应加上copy或retain参数。

    例:

    代码
    1 //TestProperty.h
    2  @interface TestProperty : NSObject {
    3 NSString *name;
    4 NSString *password;
    5 NSInteger myInt;
    6 }
    7
    8 @property (retain,nonatomic) NSString *name,*password;
    9 @property NSInteger myInt;
    10
    11 -(void) rename:(NSString *)newname;
    12
    13 @end
    14
    15 //TestProperty.m
    16 #import "TestProperty.h"
    17
    18
    19 @implementation TestProperty
    20
    21 @synthesize name,password;
    22 @synthesize myInt;
    23
    24 -(void) rename:(NSString *)newname{
    25 // 这里可以直接写成
    26 // self.name = newname;
    27 //
    28 if (name != newname) {
    29 [name autorelease];
    30 name = newname;
    31 [name retain];
    32 }
    33 }
    34
    35 -(void) dealloc{
    36 self.name = nil;
    37 self.password = nil;
    38 [super dealloc];
    39 }
    40
    41 @end
    42
    43 //测试一
    44 #import "TestProperty.h"
    45
    46 int main (int argc, const char * argv[]) {
    47 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    48 TestProperty *test = [[TestProperty alloc] init];
    49 NSMutableString *str = [NSMutableString stringWithString:@"this is name"];
    50 test.name = str;
    51 NSLog(@"%i",[str retainCount]);
    52 [test release];
    53 NSLog(@"%i",[str retainCount]);
    54 [pool drain];
    55 NSLog(@"%i",[str retainCount]);
    56 return 0;
    57 }
    58 //输出
    59 2010-12-30 10:20:30.447 HelloWorld[931:a0f] 2
    60 2010-12-30 10:20:30.449 HelloWorld[931:a0f] 1
    61 2010-12-30 10:20:30.450 HelloWorld[931:a0f] -1
    62
    63 //测试二
    64 #import "TestProperty.h"
    65
    66 int main (int argc, const char * argv[]) {
    67 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    68 TestProperty *test = [[TestProperty alloc] init];
    69 NSMutableString *str = [NSMutableString stringWithString:@"this is name"];
    70 [test rename:str];
    71 NSLog(@"%i",[str retainCount]);
    72 [test release];
    73 NSLog(@"%i",[str retainCount]);
    74 [pool drain];
    75 NSLog(@"%i",[str retainCount]);
    76 return 0;
    77 }
    78 //输出
    79 2010-12-30 10:24:59.763 HelloWorld[984:a0f] 2
    80 2010-12-30 10:24:59.776 HelloWorld[984:a0f] 1
    81 2010-12-30 10:24:59.777 HelloWorld[984:a0f] -1
  • 相关阅读:
    sshd_config参数说明
    护网小结(持续更新)
    CVE-2019-2725修复(删包)
    网址收藏
    Kali 开启 SSH 服务方法
    SSL/TLS 安全测试
    时间序列(二):时序预测那些事儿
    时间序列(一):上手体验
    推荐一个利用 python 生成 pptx 分析报告的工具包:reportgen
    评分卡系列(四):泛化误差估计和模型调参
  • 原文地址:https://www.cnblogs.com/pengxl/p/1920947.html
Copyright © 2011-2022 走看看