问题标签 [ivars]

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.

0 投票
3 回答
1962 浏览

objective-c - 使用 @synthesize 的自动 iVar

我知道从 iOS 4 开始,现在可以完全不声明 iVar,并允许编译器在您合成属性时自动为您创建它们。但是,我找不到 Apple 提供的有关此功能的任何文档。

此外,是否有任何关于使用 iVar 和属性的最佳实践或 Apple 推荐指南的文档?我一直使用这样的属性:

.h 文件

.m 文件

我使用 _indexPath 而不是 indexPath 作为我的 iVar 名称,以确保indexPath在需要使用self.indexPath. 但是现在 iOS 支持自动属性,我不需要担心这个。但是,如果我遗漏了 iVar 声明,我应该如何处理在我的 dealloc 中释放它?我被教导在 dealloc 中释放时直接使用 iVar,而不是使用属性方法。如果我在设计时没有 iVar,我可以只调用属性方法吗?

0 投票
3 回答
488 浏览

iphone - 无法让 NSString ivar 接受数组中的值

我将一些数据(一些浮点数,一些字符串)存储到 plist 中,然后将它们读回。当我读回它们时,我将它们分配给我的视图控制器中的一些 ivars。它们只是 ivars,而不是属性。

浮点数很好地接受了它们的值,我可以NSLog看到它们是正确的。但无论我尝试什么,我都无法让我的 NSString ivars 获取字符串值。

示例:数组位置 6 和 7 具有字符串Portland, OR""Pacific Daylight Time"存储在其中 - 从 plist 读回*array.

这:

结果如下:

我在发生这种情况的方法的末尾放置了一个断点,对于两个NSStringivars,弹出的小消息说,Invalid Summary.

0 投票
5 回答
5679 浏览

objective-c - Objective-c:为什么在使用 KVC 时私有 ivars 不被外部访问隐藏

在尝试使用 KVC 访问 ivars 后,我注意到私有和受保护的 ivars 没有任何保护。我在 ivar(私有或受保护的关键字)前面放什么并不重要 - 当使用 KVC 方法“setValue”时,ivar 始终是公共 ivar。这是我的代码,其中所有七个 ivars 和属性在类实例之外都是可更改的:

输出结果> public_num = 1, protected_num = 2, private_num = 3, public_property = 4, private_property = 5,very_private_num = 6,very_private_property = 7。

即使在私有接口上声明了 ivar,它仍然可以在类外更改。那么我该如何强制封装并“保护我的 ivars 免受其他恶意程序员的伤害”:)

0 投票
4 回答
713 浏览

objective-c - 在子类中更改 ivar 的类(到派生类)

假设我有两个基类,Container并且Gizmo. ClassContainer有一个实例变量 class Gizmo

现在我是子类Container(称为SubContainer),我也是子类GizmoSubGizmo)。在某些方法中,我需要向一些没有但SubContainer有的属性发送消息。有什么方法可以将 ivar 覆盖为in类,以便我可以发送这些消息?GizmoSubGizmoSubGizmoSubContainer

现在,我可以通过在SubGizmo每次需要使用此类属性或方法时将继承的 ivar 转换为它来使其工作。

这就是我想要这种行为的原因:我已经有一个可以运行的游戏,但是我添加的模式越多,它就越难维护。如果我想更改/添加将在每种模式下运行的方法;我需要去三个不同的游戏 - 控制器对象并进行更改。

通过子类化,我想将主要的游戏机制保留在基类中,并为每种模式创建一个子类。这样,我在基类中所做的更改将反映在每种模式上。然而,每个控制器和游戏对象都有针对不同模式的新方法,并且它们相互发送消息。这就是我的问题所在。

0 投票
0 回答
95 浏览

objective-c - Ivars type Nsstring in Obejctive c are nil after button event

I dont understand this yet. If I create an ivar of a class (no property). I set the ivar directly to for example @"patrik" in the - (void)viewDidLoad then the ivar value is still there when I click a button and checks for the Ivar value in the handler.

BUT! If I have two buttons. I set the ivar directly in the first button handler that I fire with a click. And then I check the Ivar in the second button handler that i fire. Then the ivar i empty?

Can someone explain what is happining?

Here is the code. Dead simple:

Here the Ivar is still here when I press the second button.


But here its not after I have pressed the first button and then the second!?

0 投票
2 回答
5525 浏览

iphone - Xcode 4.5 中@property 和 ivar 的区别

以前我总是看到像这样使用属性和 iVar 的例子......

SomeClass.h 内部

然后在 SomeClass.m

最近(在 WWDC 2012 视频中)我听说我们不再需要@synthesize,建议只使用@property没有关联的 iVar。

所以上面会变成...

一些类.h

SomeClass.m

这只是使用@property并且没有 ivar。这是有道理的,我一直在使用它。

但是,我也看到了一些例子......

一些类.h

SomeClass.m

在这方面,他们只有一个私人的iVar,没有@property

那么有什么区别呢?我知道这也@property提供了访问器方法,但您不必重写访问器方法。您可以只使用默认访问器。

那么什么时候你会使用 @property 而不是 ivar,什么时候你会只使用 ivar 而不是 a @property?你为什么不完全摆脱 ivars 而只是使用@properties呢?如果它们需要是私有的,那么只需在.m的接口扩展中使用它们。

快速编辑以响应有关内存管理的答案。strong我正在使用 ARC,对我来说,使用和weak @properties使用 iVar 时我似乎可以更好地控制内存管理。

我希望这个问题足够清楚。

谢谢

0 投票
1 回答
452 浏览

objective-c - Objective-C - 原始类型的静态字段或 ivar

我最近陷入了在 ivar 和静态字段之间进行选择的过程中。例如:我需要在红绿灯之间切换。所以我放了一个名为 isRed 的标志。到目前为止,我已经为此目的使用了一个静态布尔值,它的效果很好。现在我想我也可以为此使用实例变量,但我不知道它们之间的区别。这两种方式之间的真正区别是什么?

0 投票
2 回答
88 浏览

ios - 我应该在 iOS 中创建我的 ivars 属性吗?

只是当你认为你理解某事时,你没有!:)

我知道,如果我将变量设为属性,我可以在类中的任何位置访问它,甚至可以从该类外部设置它。

我想如果我不需要它,我可以把它变成一个 ivar。所以我有一个带有大约 5 个 UILabel 的视图控制器。所以在它的 viewDidLoad 我说:

当我在 .h 文件中这样声明它们时:

0 投票
1 回答
153 浏览

objective-c - 何时将类扩展中的属性添加到 Objective C 中的类中?

我的印象是,Objective C 中的类扩展只是匿名类别。但是,你可以为这些类扩展添加属性,这在类别中是不可能的,所以我有点困惑:

类扩展是如何实现的?作为类别?那你为什么允许向它添加 iVars 呢?何时将类扩展添加到类中,在编译时或在加载类时?

0 投票
1 回答
25 浏览

objective-c - 无法在 XMLParser 中设置 iVar

我在objective-c 中创建了一个XMLParser 类,我似乎无法在解析器进程中的共享存储中设置iVar,我尝试了很多方法,但我无处可去。

这是我的代码和返回的内容,希望这是我忽略的一个小语法错误。

。H

.m

日志