问题标签 [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.
objective-c - 使用 @synthesize 的自动 iVar
我知道从 iOS 4 开始,现在可以完全不声明 iVar,并允许编译器在您合成属性时自动为您创建它们。但是,我找不到 Apple 提供的有关此功能的任何文档。
此外,是否有任何关于使用 iVar 和属性的最佳实践或 Apple 推荐指南的文档?我一直使用这样的属性:
.h 文件
.m 文件
我使用 _indexPath 而不是 indexPath 作为我的 iVar 名称,以确保indexPath
在需要使用self.indexPath
. 但是现在 iOS 支持自动属性,我不需要担心这个。但是,如果我遗漏了 iVar 声明,我应该如何处理在我的 dealloc 中释放它?我被教导在 dealloc 中释放时直接使用 iVar,而不是使用属性方法。如果我在设计时没有 iVar,我可以只调用属性方法吗?
iphone - 无法让 NSString ivar 接受数组中的值
我将一些数据(一些浮点数,一些字符串)存储到 plist 中,然后将它们读回。当我读回它们时,我将它们分配给我的视图控制器中的一些 ivars。它们只是 ivars,而不是属性。
浮点数很好地接受了它们的值,我可以NSLog
看到它们是正确的。但无论我尝试什么,我都无法让我的 NSString ivars 获取字符串值。
示例:数组位置 6 和 7 具有字符串Portland, OR"
并"Pacific Daylight Time"
存储在其中 - 从 plist 读回*array.
这:
结果如下:
我在发生这种情况的方法的末尾放置了一个断点,对于两个NSString
ivars,弹出的小消息说,Invalid Summary.
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 免受其他恶意程序员的伤害”:)
objective-c - 在子类中更改 ivar 的类(到派生类)
假设我有两个基类,Container
并且Gizmo
. ClassContainer
有一个实例变量 class Gizmo
。
现在我是子类Container
(称为SubContainer
),我也是子类Gizmo
(SubGizmo
)。在某些方法中,我需要向一些没有但SubContainer
有的属性发送消息。有什么方法可以将 ivar 覆盖为in类,以便我可以发送这些消息?Gizmo
SubGizmo
SubGizmo
SubContainer
现在,我可以通过在SubGizmo
每次需要使用此类属性或方法时将继承的 ivar 转换为它来使其工作。
这就是我想要这种行为的原因:我已经有一个可以运行的游戏,但是我添加的模式越多,它就越难维护。如果我想更改/添加将在每种模式下运行的方法;我需要去三个不同的游戏 - 控制器对象并进行更改。
通过子类化,我想将主要的游戏机制保留在基类中,并为每种模式创建一个子类。这样,我在基类中所做的更改将反映在每种模式上。然而,每个控制器和游戏对象都有针对不同模式的新方法,并且它们相互发送消息。这就是我的问题所在。
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!?
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 时我似乎可以更好地控制内存管理。
我希望这个问题足够清楚。
谢谢
objective-c - Objective-C - 原始类型的静态字段或 ivar
我最近陷入了在 ivar 和静态字段之间进行选择的过程中。例如:我需要在红绿灯之间切换。所以我放了一个名为 isRed 的标志。到目前为止,我已经为此目的使用了一个静态布尔值,它的效果很好。现在我想我也可以为此使用实例变量,但我不知道它们之间的区别。这两种方式之间的真正区别是什么?
ios - 我应该在 iOS 中创建我的 ivars 属性吗?
只是当你认为你理解某事时,你没有!:)
我知道,如果我将变量设为属性,我可以在类中的任何位置访问它,甚至可以从该类外部设置它。
我想如果我不需要它,我可以把它变成一个 ivar。所以我有一个带有大约 5 个 UILabel 的视图控制器。所以在它的 viewDidLoad 我说:
当我在 .h 文件中这样声明它们时:
objective-c - 何时将类扩展中的属性添加到 Objective C 中的类中?
我的印象是,Objective C 中的类扩展只是匿名类别。但是,你可以为这些类扩展添加属性,这在类别中是不可能的,所以我有点困惑:
类扩展是如何实现的?作为类别?那你为什么允许向它添加 iVars 呢?何时将类扩展添加到类中,在编译时或在加载类时?
objective-c - 无法在 XMLParser 中设置 iVar
我在objective-c 中创建了一个XMLParser 类,我似乎无法在解析器进程中的共享存储中设置iVar,我尝试了很多方法,但我无处可去。
这是我的代码和返回的内容,希望这是我忽略的一个小语法错误。
。H
.m
日志