- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
初学者问题在这里:
我试图了解一些基本的内存管理。如果我要重写setter方法,以下内容是否可以充分处理传入字符串的内存管理?
- (void)setMyString:(NSString *)string
{
if (_myString != string){
[string retain];
[_myString release];
_myString = string;
}
}
最佳答案
您写的内容正确,除了最后的return _myString
语句。
当您调用保留字符串时,您会将实例的引用计数加1。将string的值关联到_myString
不会更改实际实例(现在由string
和_myString
都指向),因此不需要第二个保留,这将是不正确的。
所有这些,您所拥有的只是多余的。进行if (_myString != string)
检查的原因是,如果用已拥有的相同对象调用了setter,则在有机会保留该对象之前,您不希望释放该对象。在这种情况下,该程序将崩溃,因为您释放它后,它会被释放,但是您保留对它的引用并继续使用它(发送消息)。由于对象是相同的,因此如果函数的参数与实例变量的当前值相同,则不执行任何操作即可避免此问题。但是,在释放实例变量之前保留参数是完成完全相同的另一种方法。
因此,您可以执行以下任一操作:
- (void)setMyString:(NSString *)string
{
if (_myString != string) {
[_myString release];
_myString = [string retain];
}
}
- (void)setMyString:(NSString *)string
{
[string retain];
[_myString release];
_myString = string;
}
关于objective-c - 在 objective-c 中在二传手中保留和释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12847046/
我是 Scala 的新手,具有基本的 Java 背景。我研究了如何实现类构造函数以及如何在 setter 中为该类的字段提供一些逻辑。 class SetterTest(private var _x:
我想知道的是,当我们可以简单地将值直接分配给私有(private)对象时,为什么我们需要私有(private) setter?考虑以下代码: private int counter = 0; publ
我试图为 recordingStatus 赋值 -即recordingStatus = 1但它没有进入我想要一些自定义代码的 setter ..我的代码有什么问题? 谢谢。 码头。 在文件.h中 @p
仍在习惯 Entity Framework ,但我已经看到如下代码,它们在实体中为 id 设置了私有(private) setter 。 public int Id { get; private se
省略 setter 的属性和带有私有(private) setter 的属性有什么区别? public string Foo { get; private set; } 对比 public strin
我不明白拥有以 C# 2 开头的私有(private) setter 的必要性。 对我来说有一个 setter 方法就是让用户在那个类中设置一些变量。这样做时,我们不会将变量直接暴露给用户。相反,我们
我有一个 QObject,其属性可从 QML 访问。 就像是: Class C : public QObject { Q_OBJECT public: explicit C(QObject * par
有没有办法在 TypeScript 中为属性设置私有(private) setter? class Test { private _prop: string; public get p
我一直在寻找,但找不到任何相关的引用资料。我想在 Dart 中创建一个私有(private) setter,以便在更改私有(private)变量后调用附加函数。 ViewState _state; V
这是由apple提供的pint结构setter getter介绍的point example如何让只有二传手私有(private) struct Point { var x = 0.0, y
我编写了一个自定义序列化程序,它通过反射设置对象属性来工作。可序列化类使用可序列化属性进行标记,所有可序列化属性也进行标记。例如,下面的类是可序列化的: [Serializable] public c
我知道有一个属性可以处理私有(private) setter ,但我有点希望将此行为作为默认行为,有没有办法实现这一点?除了调整来源。如果有这样的设置就好了。 最佳答案 我来这里是为了寻找使 Json
我是一名优秀的程序员,十分优秀!