问题标签 [ivar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - IBOutlets 应该是 ivars 还是属性?
虽然我确定它们存在,但我很难找到或确定在 ViewController 中声明插座的官方最佳实践。
据我所知,有3个选项:
- 仅限伊瓦尔
- 仅财产
- 以 ivar 为后盾的属性
当我尝试通过从 IB 拖入 ViewController 来自动生成属性时,Xcode 当前崩溃,但据我记得,这样做会创建一个没有 ivar 的属性。也可以拖入 ivar 部分,这将创建一个没有属性的 ivar。这表明仅限财产的网点和仅限 ivar 的网点都适用于苹果。
因此,在 viewDidUnload 中,我们需要将 nil 分配给我们的任何出口,但 dealloc 呢?如果我们使用了没有 ivar 的属性,如果我们不应该在 init 或 dealloc 中使用任何访问器,我们如何释放我们的出口?
在我看来,唯一允许我们在没有访问器的情况下释放出口的模式是使用由 ivar 支持的属性,因此我们可以在 dealloc 中手动释放 ivar 而不使用其访问器,但这是 Apple 的一个选项代码生成不支持。
getter - 目标 C:Getter 方法与 Class.ivarName
我对如何跨文件访问变量感到很困惑。
例如:
我有 3 个文件:Apple、Fruit 和 Eat
水果.h
水果.m
苹果.h
苹果.m
//我的 Eat.h 实际上是空的,因为我认为我不需要它
吃.m
我从头开始写这些只是作为示例。因此,请忽略愚蠢的语法错误,例如缺少分号,以及我错过的明显内容。我只是在反映我正在努力解决的问题。
我想我的困惑是在 Apple.m 中,您可以使用句点符号 (.) 访问 Fruit 的名称 ivar。但在 Eat.m 中,我无法使用 (.) 访问苹果的名称 ivar。我知道我应该/可以编写一个 getter 方法,但是有没有办法以我尝试跨文件的方式直接访问变量?我知道它可能是糟糕的编程技术(如果它甚至可以完成的话),但我只是很困惑为什么功能不一样。
objective-c - 在 ARC 下,直接分配给 ivar 时会自动复制块吗?
假设ARC下的代码如下,
问题:分配给 ivar 时,block 是否会自动复制到堆中?
我之前的问题暗示它在通过@property
. 但是,今天我使用了上面的代码并收到了一个EXC_BAD_ACCESS
通过更改为
_ivarResponseHandler = [responseHandler copy]
.
cocoa - 综合属性和 ivar 错误
我一直在“调试 X86-64”模式(Xcode 3.6)下构建我的程序,并且一切正常。但是,我只是尝试切换到“Release X86-64”模式,并且在编译时收到我的每个属性的以下错误:
其中“x”是我的属性之一,第一个是“公司”(我收到了 51 个此类错误。)。在我的 .h 接口文件中,我以这种方式列出了这些项目:
在我的 .M 实现文件中,我将它们合成为:
我的理解是,实例变量是为这些属性自动创建的……事实上,它们似乎工作得很好,直到我尝试在“发布”模式下编译。
我在书中找不到任何我必须解释的东西。我做错了什么,或者更具体地说,我应该为“发布”编译修复这个问题吗?
谢谢!
objective-c - ARC 不是消除了 Objective-C 中对属性的需求吗?
注意:我实际上不认为我们可以取消属性,但我试图理解为什么不这样做的原因。:)
回到这个问题,我们使用属性的主要原因似乎是避免内存管理问题。换句话说,通过创建一个属性,我们摆脱了写出所有这些保留和释放方法的需要:
既然 ARC 现在处理这个问题,我们是否可以不一起取消属性并通过执行类似的操作来设置 ivars otherObject = anotherObject
?
nsmanagedobject - NSManagedObject 类中的实例变量就像一个类变量?
仅限 IOS 5,带有 ARC。在我的核心数据模型类中:
我使用 MagicalRecord 创建“Venus”和“Mars”。在我的视图控制器中,我使用标签和按钮来测试上述内容。测试表明,当我“访问”火星时,金星也会被访问。如果我将 ivarvisitedByHumans 切换为非核心数据属性,它会按预期工作。所以我不再“卡住”,但我想了解 ivar 的事情。
iphone - 目标 C:哪个发生了变化,属性还是 ivar?
担心重复但似乎无法找到并回答我可以在任何其他帖子中理解,我只需要问:
当我在我的 .h 中时:
然后在我的.m
当我按下“changeButton”时,是合成属性还是实例变量发生了变化?
objective-c - 我想使用 -> 运算符设置 ivar
我想使用 -> 运算符设置 ivar。我收到一个错误:无法静态分配接口类型。我不想要点运算符。
类视图控制器
objective-c - 通过弱指针在块中分配 ivar
isFinished
我的接口文件中有一个只读属性:
我想YES
稍后将其设置为一个块,而不创建保留周期self
:
我不确定这是不是正确的方法。这段代码会泄漏、损坏还是没问题?也许我忽略了一种更简单的方法?
objective-c - 在目标 c 中使用 ivars 与属性的原因
我一直找不到关于这个主题的任何信息,而且我所知道的大部分信息都是完全偶然的(并且花了几个小时试图弄清楚我的代码为什么不起作用)。在学习objective-c时,我发现大多数教程都使用相同的名称制作变量和属性。我不明白其重要性,因为似乎该属性完成了所有工作,而变量只是坐在那里。例如:
测试.h
测试.m
我知道的
1)好的,所以今天我发现(经过数小时的困惑),无论您对属性做了多少更改,highscore = 5091231
当您尝试调用 [test highscore] 时它都不会改变任何东西,因为它仍然会返回 _highscore 的值其中(我认为)是在 test.h 中设置的 ivar。所以 test.m 中所有变量的变化都需要改变 _highscore 而不是 highscore。(如果我在这里错了请纠正我)
2)如果我理解正确(我可能不理解), test.h 中设置的 ivars 代表实际内存,而 @properties 只是访问该内存的方法。因此,在实现之外,我无法访问 _highscore 而不通过该属性。
我不明白的
基本上我对这种情况不了解的是我是否需要使用 ivars 或者我是否可以只使用 @property 和 @synthesize。似乎 ivars 只是额外的代码,除了让我感到困惑之外,它并没有真正做任何事情。我见过的一些最近的 tuts 似乎没有使用 ivars,但后来有些使用了。那么这只是编码偏好还是实际上很重要?我曾尝试通过 Apple 的文档进行搜索,但我在其中迷失了方向,似乎从未找到我想要的东西。任何指导将不胜感激。