小编hyp*_*asm的帖子

当使用KVO时,有必要在-dealloc中删除自我作为自我的观察者吗?

在我的NSObject子类的-init方法中,实例将自身添加为一些自己的keyPath的观察者,以便触发在任何一个有问题的属性发生更改时应该发生的操作.例如.

[self addObserver:self forKeyPath:@"aProperty" options:0 context:nil];
[self addObserver:self forKeyPath:@"anotherProperty" options:0 context:nil];
...
Run Code Online (Sandbox Code Playgroud)

我的问题是,在类的-dealloc方法中,我是否一定需要删除实例作为自身的观察者?例如.

[self removeObserver:self forKeyPath:@"aProperty"];
[self removeObserver:self forKeyPath:@"anotherProperty"];
...
Run Code Online (Sandbox Code Playgroud)

我的方式,当一个对象试图向一个不再存在的对象发送消息然后抛出异常时,显然是一个问题.但在这种情况下,一个不再存在的对象不可能向自己发送消息,所以这应该不是问题.

我还没有遇到任何问题,但它仍然有点困扰我,因为我从未见过明确声明你可以这样做.

我只是想避免写一大堆

[self removeObserver:self forKeyPath ...]
Run Code Online (Sandbox Code Playgroud)

在我的-dealloc方法中.

objective-c key-value-observing

7
推荐指数
1
解决办法
3028
查看次数

具有固定宽度和NSAttributedString的UILabel的渲染行数

我有一个UILabel,其文本是通过-setAttributedText: NSAttributedString进行动态设置的,其中包含各种动态属性,即贯穿各处的各种字符的不同字体或样式。UILabel的宽度受限制(通过自动布局),高度是可变的(numberOfLines = 0)。

我需要确定的是给定NSAttributedString和宽度约束后呈现的文本行数。

请注意,我不是在寻找标签的高度,而是在寻找渲染线的数量。还要注意,我无法基于font.lineHeight执行任何计算,因为字体在整个NSAttributedString中都是变化的。

对于某些背景,将为label.textAlignment=NSTextAlignmentCenter行数label.textAlignment=NSTextAlignmentLeft为1 的标签和行数为2或更多的标签进行设置。例如,我将-[UIViewController viewDidLayoutSubviews]在自动布局和UILabel完成业务后进行此操作。也许有一种更简单的方法可以实现相同的目标。

iphone objective-c ios

4
推荐指数
2
解决办法
2423
查看次数

标签 统计

objective-c ×2

ios ×1

iphone ×1

key-value-observing ×1