ios开发知识点装逼4:内存管理好习惯

news/2024/7/20 12:56:38 标签: 内存管理, 移动开发, python

2019独角兽企业重金招聘Python工程师标准>>> hot3.png



1,谁拥有,谁释放
   如何拥有:alloc,copy,retain
   如何释放:release,autorelease


2,performSelector:withObject:afterDelay 这方法很容易搞出内存泄露,小心一点
   如何避免:
   (1)使用前先检测一下,
    SEL testSelector = @selector(test:);
    if([tester respondsToSelector:testSelector]) {
         [tester test:@"invoke test method"];
    }
(2)使用后
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(test:) object:nil]


3,deleagate属性用用assign来修饰占有权.


4,内存管理好习惯
(1)使用属性访问尽可能多的来代替变量来减少retain和release的代码,举例:
     @interface Counter: NSObject{
    NSNumber *_count;
    }
    @property (nonatomic, retain) NSNumber *count;
    //“get”访问方法:
    - (NSNumber *)count{
        return _count;
    }
      //“set”访问方法:
    - (void)SetCount: (NSNumber *)newCount{
        [newCount retain];
        [_count release];
        _count = newCount; //Make the new assignment;
    }
(2)使用setProperty给属性赋值,举例
    -(void)reset{
        NSNumber *zero = [NSNumber numberWithInteger:0];
        [self setCount:zero];
    }
    不要这么搞:
    -(void)reset{
        NSNumber *zero = [[NSNumber alloc] initWithInteger:0];
        [_count release];
        _count = zero;
    }
    不要这么搞的原因:代码多了,KVO不起作用了
(3)初始化和销毁的时候不要用访问方法,直接用变量。举例:
    初始化1:
     - init {
       self = [super init];
       if (self) {
           _count = [[NSNumber alloc] initWithInteger:0];
       }
       return self;
    }
    初始化2:
    - initWithCount:(NSNumber *)startingCount {
           self = [super init];
           if (self) {
           _count = [startingCount copy];
   }
       return self;
    }
    销毁:
    - (void)dealloc {
           [_count release];
           [super dealloc];
    }
(4)用weak来避免循环调用,table data sources ,outline view items,noification observers,targets and delegates
(5)避免销毁正在使用的对象,举例:
    heisenObject = [array objectAtIndex:n];
    [array removeObjectAtIndex:n]; //heisenObject从此被销毁了,需要retain一下下
    变成下面的就好了:             
    hesienObject = [[array objectAtIndex: n] retain];
    [array removeObjectAtIndex:n];
    [hesienObject release];
(6)不要指望在deallocate里面去销毁重量级资源,请您写专门的cleanup方法来做。
      重量级资源:file descriptors, network connections, buffers,caches 等
(7)Collections自带retain,release无须手动添加多此一举



抄袭:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447


















   

转载于:https://my.oschina.net/openlab/blog/90573


http://www.niftyadmin.cn/n/1484591.html

相关文章

java string 长度 -1_Java中String长度有限制吗?身边的同事每一个人知道!

你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起精进!编辑:业余草www.toutiao.com/i6893014573322863111推荐:https://ww…

python多维数据post给php_python post-php请求

我正试图创建一个PHP页面,它从我的Python代码中获取数据,并将它们显示为一个表。r requests.post(http://localhost/index.php, data{"iv":a,"ven":b,"hem":c,"card":d,"ecg":e})print(r.text)在上面的代码中,我发布数据,然…

各数据库注释

Oracle REM单行注释 -- 单行注释 /*多行注释*/ MS SQL Server -- 单行注释 /*多行注释*/ MySQL #单行注释 -- 单行注释(特别注意,-- 后有个空格!!!) /*多行注释*/ 总结: /*多行注释*/ 和-- 单…

scrapy mysql 报错_scrapy数据存储在mysql数据库的两种方式

方法一:同步操作1.pipelines.py文件(处理数据的python文件)importpymysqlclassLvyouPipeline(object):def __init__(self):#connection databaseself.connect pymysql.connect(hostXXX, userroot, passwdXXX, dbscrapy_test) #后面三个依次是数据库连接名、数据库密…

github密码格式_[网络]通过api启动GitHub云服务器

[网络]登录上“真香”的GitHub云和[网络]薅资本主义羊毛之GitHub编译OpenWrt中的启动Actions都是在push代码上去后,是否可以通过api方式控制呢,顺便传递一些参数过来?以下将实现遇到的问题分解。# 完整代码https://github.com/kukutt/actions…

IBM DS系列存储巡检案例

1. 使用工具&#xff1a;笔记本&#xff0c;网线一根&#xff0c; 2. 使用软件&#xff1a;vmware虚拟机&#xff08;安装XP P2系统&#xff0c;最好为P3&#xff09;&#xff0c;SMIA-WS32-10.60.35.11.exe&#xff08;IBM 4000<管理软件&#xff09;&#xff0c;jre-6u33-…

mysql 变量作用_MySQL的变量类别及作用

MySQL的变量类别及作用发布时间&#xff1a;2020-05-09 10:15:37来源&#xff1a;亿速云阅读&#xff1a;121作者&#xff1a;三月下面跟着笔者一起来了解下MySQL的变量类别及作用&#xff0c;相信大家看完肯定会受益匪浅&#xff0c;文字在精不在多&#xff0c;希望MySQL的变量…

心有所向,逐之

写文章注册登录 首页下载App 心有所向&#xff0c;逐之 潇洒一朵云 关注 2018.06.24 23:29* 字数 1516 阅读 100评论 3喜欢 1图片发自简书App不要因为走的太远忘记了为什么出发。 2018年6月24日 周日 多云 小时候&#xff0c;常被问起长大后的梦想是什么。或者&#xff0c;以…