相关疑难解决方法(0)

在强者退出之后,为什么我的弱参考不被清除?

我有点顽固,但我想了解弱弱和强烈的参考,所以这就是为什么我再次问你.

考虑一下:

__weak NSString* mySecondPointer = myText;   
NSLog(@"myText: %@", myText);
Run Code Online (Sandbox Code Playgroud)

结果是myText: (null)非常明显的 - 弱引用在赋值后设置为null,因为没有对尖头对象的强引用.

但在这种情况下:

__strong NSString* strongPtr = [[NSString alloc] initWithFormat:@"mYTeSTteXt %d"]; 
// weak pointer points to the same object as strongPtr
__weak NSString* weakPtr = strongPtr;
if(strongPtr == weakPtr) 
     NSLog(@"They are pointing to the same obj");        
NSLog(@"StrongPtr: %@", strongPtr);
NSLog(@"weakPtr: %@", weakPtr);

NSLog(@"Setting myText to different obj or nil");

// after line below, there is no strong referecene to the created object:
strongPtr = [[NSString alloc] …
Run Code Online (Sandbox Code Playgroud)

weak-references reference-counting objective-c strong-references

28
推荐指数
1
解决办法
3065
查看次数

@"some text"是否会自动释放或保留1个对象?

鉴于此代码:

// Initialize string
NSString *name = @"Franzi";
Run Code Online (Sandbox Code Playgroud)

@""宏创建一个带有给定文本的NSString(这里名称为Franzi)和一个RETAIN COUNT OF 1?

所以@""给出了一个必须被释放的NSString?我对这个对象负责吗?第二个代码示例然后让我感到困惑,即使我这样使用它:

NSSting *message;
message = [NSString stringWithFormat:@"Hello @%!",name];
//message = [NSString stringWithFormat:@"Hello Girl!"];
Run Code Online (Sandbox Code Playgroud)

因此消息在下一个运行循环中释放,k.但是作为stringWithFormat的参数给出的NSString是什么?

类对象NSString是否释放了作为争论的NSString @"Hello%@"/ @"Hello Girl"?或@"" - Konstruktor只回馈自动释放的NSStrings?

memory-management objective-c autorelease

11
推荐指数
1
解决办法
2042
查看次数

滚动UITableView时,仪器显示"_NSContiguousstring"内存泄漏

我有一个UItableView,由10个元素组成.我打开了仪器以捕获内存泄漏,当我滚动tableView时,它开始泄漏内存.在仪器中我试图找到哪个导致泄漏但无法弄清楚,它说"_NScontiguousstring"表示整个泄漏.

我找到了Objective-C的一些解决方案,他们在"CellForRowAt"函数中检查了单元格是否为nil.我不认为它对Swift有用,但我试过并且按预期它不起作用.

内存泄漏UITableView

我的问题是什么会导致这种内存泄漏?

我测试的设备;

iPhone X on 11.3.1

iPhone 6 11.2.5控制器类;

class TableViewController: UITableViewController {
let teamModel = TeamModel(uid: "adsada", name: "First Team ", idea: "idea 1", slogan: "Slogan 1", university: "dasda", image: "info", isActive: true)
let teamModel2 = TeamModel(uid: "adsada", name: "Team 2", idea: "idea 2", slogan: "adasd", university: "dasda", image: "info", isActive: true)
let teamModel3 = TeamModel(uid: "adsada", name: "Team 3", idea: "idea 3", slogan: "adasd", university: "dasda", image: "info", isActive: true)
let teamModel4 = TeamModel(uid: "adsada", …
Run Code Online (Sandbox Code Playgroud)

memory-leaks uitableview ios swift

10
推荐指数
1
解决办法
527
查看次数

将文本分配给UILabel时内存泄漏(iOS,Swift 4,Xcode 9)

我一直在开发没有情节提要的新应用。一切正常,直到我使用Instruments测试我的应用程序:每次将字符串分配给标签时,该应用程序都会泄漏。当我使用情节提要时,我没有那样的漏洞。

我已阅读以下资源以找到答案:

最受欢迎的观点是这是一个Instruments错误,但对我来说似乎太明显了。

泄漏在空的应用程序中重现。在根视图控制器中:

class ViewController: UIViewController {

var label: UILabel?

override func viewDidLoad() {
    super.viewDidLoad()

    label = UILabel()
    view.addSubview(label!)
    var textForLabel: String? = "Hello"
    label?.text = textForLabel

    //attempt to free the memory
    textForLabel = nil
    label = nil

    //EDIT: added after @J.Doe and @Sh-Khan answers, but it's still leaking
    label.removeFromSuperview()

   }
}
Run Code Online (Sandbox Code Playgroud)

在真实设备(iPhone SE 11.2)上的Instruments中测试此应用时,我看到以下内容:

在此处输入图片说明

单击_NSContiguousString时,我看到[UILabel setText:]中出现内存泄漏。

在此处输入图片说明

我试图将标签设置为弱,但是当我尝试将其添加为子视图时,它变为零。

因此,我的问题是:

  • 现在和将来如何消除这种内存泄漏?
  • 因此,我应该仅在.xib / .storyboard文件中创建UI元素吗?

我是iOS开发的新手,所以我认为我缺少明显的东西。我将不胜感激任何帮助或建议。

编辑:根据@ Sh-Khan@ J.Doe的 …

memory-leaks uilabel ios swift

6
推荐指数
1
解决办法
573
查看次数

Objective C NSString*属性保留计数奇数

我有以下示例类:

Test.h:

@interface Test : UIButton {
    NSString *value;
}
- (id)initWithValue:(NSString *)newValue;
@property(copy) NSString *value;
Run Code Online (Sandbox Code Playgroud)

Test.m:

@implementation Test
@synthesize value;
- (id)initWithValue:(NSString *)newValue {
    [super init];   
    NSLog(@"before nil value has retain count of %d", [value retainCount]);
    value = nil;
    NSLog(@"on nil value has retain count of %d", [value retainCount]);
    value = newValue;
    NSLog(@"after init value has retain count of %d", [value retainCount]);
    return self;
}
Run Code Online (Sandbox Code Playgroud)

其中产生以下输出:

2008-12-31 09:31:41.755 Concentration[18604:20b] before nil value has retain count of 0
2008-12-31 09:31:41.756 …
Run Code Online (Sandbox Code Playgroud)

xcode cocoa cocoa-touch objective-c ios

5
推荐指数
3
解决办法
2万
查看次数

NSString长度和retainCount.需要澄清

根据以下代码,请指教

NSString *str= [[NSString alloc] initWithString:@"Hello world"];   

NSLog(@"Length: %lu\n", [str length]);              // 11
NSLog(@"Retain count is %lu\n", [str retainCount]); //1152921504606846975

[str release];

NSLog(@"%lu\n", [str length]);                      // 11
NSLog(@"Retain count is %lu\n", [str retainCount]); //1152921504606846975
Run Code Online (Sandbox Code Playgroud)
  1. 最初我想知道为什么数字这么大但后来看到一个帖子解释它.试问,而不是...为什么这个号码改成我大大是否使用%dVS %lu.最初,我使用过%d,但得到一个警告,说" 转换指定类型int但参数的类型为NSUInteger(也就是unsigned long).修复是%d改为%lu"

  2. 为什么保留计数不减少?str发送后,大数字仍然显示不变release

  3. 为什么我str发送后仍能访问release

memory-management objective-c

4
推荐指数
1
解决办法
483
查看次数

为什么将计数保留在负值?

可能重复:
NSString保留Count

是否有可能任何对象的保留计数为负值?

我有这个代码

NSString *str = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"String Retain Count: %i", [str retainCount]);
Run Code Online (Sandbox Code Playgroud)

这将返回保留计数 -1.

为什么会这样?

我也是这样做的

NSString *str = [[NSString alloc] init]
Run Code Online (Sandbox Code Playgroud)

仍然是保留计数中的返回负值.

这是怎么回事?

请帮忙了解这件事!!!!!

iphone memory-management objective-c ios retaincount

4
推荐指数
1
解决办法
553
查看次数

NSString retainCount是2147483647

可能重复:
NSString保留计数
目标C NSString*属性保留计数
奇数何时使用-retainCount?

为什么此代码显示保留值大于1?为什么它是2147483647?

NSString *data22 = [[NSString alloc] initWithString:@"fsdfsfsdf"];

int a = [data22 retainCount];
NSLog(@"retain count 1== %d  ====" ,a);
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是

 retain count 1== 2147483647  ====
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c

2
推荐指数
1
解决办法
1279
查看次数

请解决这里在Objective C中保留NSString对象的数量

请解决这个问题.

NSString *S1 = @"abc";
//retain count of s1 ??

NSString *S2 = [S1 copy];
//retain count of s2 and s1 ??

NSString *S3 = [S2 copy];
//retain count of s3 and s2 ??

NSString *S4 = [S3 retain];
//retain count of s4 and s3 ??

NSString *S1 = @"xyz";
//retain count of s1, s2, s3 and s4 ??
Run Code Online (Sandbox Code Playgroud)

不建议retainCount因为我认为没有给出确切的结果.

memory-management copy objective-c retaincount

-2
推荐指数
1
解决办法
486
查看次数