增加了多少引用计数

发布于 2024-11-03 05:58:13 字数 1107 浏览 0 评论 0原文

我现在这是一个愚蠢的问题,但我对这个案例的理解仍然很差。这是关于内存管理和引用计数的,我对如果使用复制、分配和可变复制会增加多少引用计数有一些疑问。这是我的代码:

这是 myController.h :

#import <UIKit/UIKit.h>


@interface myController : UIViewController {
NSMutableString *mutableStringCode;
}
@property (nonatomic, copy) NSMutableString *mutableStringCode;
@end

这是

#import "myController.h"


@implementation myController

-(void)viewDidLoad{
    mutableStringCode = [[NSMutableStringCode alloc]init];
    [self refresh];

}


-(void)refresh{
    NSMutableString *myFileContents = [NSMutableString stringWithContentsOfFile:localPath encoding:NSUTF8StringEncoding error:&error];

    mutableStringCode = [myFileContents mutableCopy]; 

    //another code

    myFileContents = nil;
}


-(void)dealloc{
    [mutableStringCode release];

    [super dealloc];

}

@end

这段代码中的 myController.m ,我有一些疑问: 1. mutableStringCode 增加了多少引用计数? 2.使用copy而不是retain设置mutableStringCode属性是正确的方法吗? 3. 在属性上设置复制后,我是否仍然需要分配该 mutableStringCode

有人可以向我描述一下吗? 谢谢

i now this is a silly question, but i still have some poor understanding about this case. It is about memory management and reference count, i have some doubt about how many reference count will increase if i use copy, alloc, and mutable copy. This is the code i have :

This is myController.h :

#import <UIKit/UIKit.h>


@interface myController : UIViewController {
NSMutableString *mutableStringCode;
}
@property (nonatomic, copy) NSMutableString *mutableStringCode;
@end

and this is myController.m

#import "myController.h"


@implementation myController

-(void)viewDidLoad{
    mutableStringCode = [[NSMutableStringCode alloc]init];
    [self refresh];

}


-(void)refresh{
    NSMutableString *myFileContents = [NSMutableString stringWithContentsOfFile:localPath encoding:NSUTF8StringEncoding error:&error];

    mutableStringCode = [myFileContents mutableCopy]; 

    //another code

    myFileContents = nil;
}


-(void)dealloc{
    [mutableStringCode release];

    [super dealloc];

}

@end

in this code, i have some doubts :
1. how many reference count increase in that mutableStringCode ?
2. is it a true way to set mutableStringCode property using copy not retain?
3. am i still have to alloc that mutableStringCode after i set it copy on property?

can some body describe it to me??
Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何其悲哀 2024-11-10 05:58:13
  • 如果您只是创建 myController 类的一个实例,然后释放它,那么一切都会好起来的。 mutableStringCode 将在 viewDidLoad 中创建(如果会被调用)并在 dealloc 中释放。发生这种情况是因为 alloc 保留了对象。
  • 每次调用刷新时,都会发生以下情况:
    • 您创建自动释放的可变字符串 myFileContents。
    • 将其复制到 mutableStringCode 并保留它(复制保留对象)。

我在这里看到的主要问题是,在刷新期间,您没有释放已经创建的 mutableStringCode。所以它保留在内存中(这是通常的内存泄漏)。

您可以尝试使用分析或 Instruments 的泄漏工具来捕获这些类型的内存泄漏。

  • If you simply create an instance of the myController class, and then release it, everything will be fine. mutableStringCode will be created in viewDidLoad (if it will be called) and released in dealloc. It happens because alloc retains object.
  • Every time you call refresh, these things happen:
    • you create autoreleased mutable string myFileContents.
    • you copy it to mutableStringCode, retaining it (copy retains object).

The main problem I see here is that during refresh you are not releasing already created mutableStringCode. So it stays retained in memory (it is usual memory leak).

You can try to catch these types of memory leaks with Analyse or with Instruments' Leaks tool.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文