问题标签 [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 - Objective-c 中枚举类型的 ivars 的默认值
我有一个enum
这样的:
我有一个在接口中声明的 ivar 类,如下所示:
目前 myTypeIvar 的默认值为 ThingA(因为 ThingA 在枚举中的第 0 位)。 使 myTypeIvar ThingB 的默认值的最佳方法是什么?
一种解决方案是简单地重新排序枚举定义(将 ThingB 放在第 0 位)。另一种解决方案是在init
方法中设置 myTypeIvar。但是 init 方法不存在(并且当它被添加时它永远不会被调用)。
objective-c - Objective-C:Xcode 自动识别 ' = _property ":这是 @synthesize 创建的变量名吗?
当您声明 a@property
和@synthesize
it 时,最好使用:
我注意到 Xcode 会_myProperty
为您自动完成 ivar 名称,即使它尚未在源代码中使用。
这是因为 ivar@synthesize
会自动创建默认名称_myProperty
吗?还是仅仅因为 Xcode 支持这种带有自动补全功能的通用约定?
谢谢。
编辑:我不是在寻找为什么这是一种好习惯的原因;我已经知道这些并且已经使用了这个约定一段时间了。我想了解内部结构,因此询问这是否是满足约定的硬编码自动完成规则,或者它是否是标准自动完成,实际上 Objective-C 规范规定生成的 ivar@synthesize
必须具有form _myProperty
,因此在 ivar 的幕后生成之后,自动完成就知道它的存在。谢谢!
ruby-on-rails - Rails 视图 ivars 在 ruby 1.9 中自发燃烧
我有一个 Rails 3 / ruby 1.9.2 webapp。每隔一段时间 - 它可能只是 100000 中的 1 个请求 - 我收到一个我无法解释的错误报告。
确切的错误各不相同,但它们似乎与我认为实例变量突然变为 nil 一样。最近发生了最明显的例子,其中这个代码在一个助手中 -
- 引发“NoMethodError:nil:NilClass 的未定义方法‘+’”。但是,请注意,错误不仅限于这种情况,这两行代码仅用于说明,而不是可以解决“解决”问题的方法。
该错误基本上是不可能重现的:我自己从未见过它,只看到了由此产生的错误报告。我相信当我们从 REE 切换到 ruby 1.9.2 时,该错误首次出现。
可能相关或不相关的其他细节:
- 我们在 Solaris 10 上运行 ruby1.9.2p290,使用 unicorn 分叉实例
- 我们没有使用线程或纤维(更正:我们的应用程序本身没有,但我们确实使用了 NewRelic,它有一个用于收集/发布统计数据的后台线程。)
- 我们混合了 .haml 和 .erb 视图,但我只见过这种情况发生在 .haml 中。(不过,我们没有很多 .erb)
- 我从未在控制器代码中看到过这种情况
- 当我知道我们从不调用 Bar.foomethod 的事实时,我偶尔会看到有关“Bar 的未定义方法 'foomethod'”的错误。这可能与上述错误有关,其中 Bar 对象自发地替换了 Foo ivar。
我很难追踪这个。有什么建议,或者有没有人看到任何听起来相似的东西?
objective-c - ARC时代的财产与ivar
据我了解,现在设置 ivar 会保留分配给它的对象,因为设置变量默认为strong
限定符。因为 ivars 在声明它们的strong
对象的范围内,并在变量范围内保留对象,这意味着当包含 ivar 的对象仍然存在时,永远不会释放 ivars 值。
它是否正确?
如果是这样,我是否认为在内存管理方面,保留(强)属性和简单的 ivar 之间没有区别了?
objective-c - 在父对象被释放后延迟释放 ivar
我有一个类 TouchInfo,它有一个类 MotionStreak 的 ivar。
此类基本上处理触摸事件并绘制跟随触摸的运动条纹。我想TouchInfo
在用户释放他/她的手指时释放与特定触摸关联的实例,但我希望运动条纹在淡出之前保持 0.5 到 1.0 秒,所以我不能在类的方法中释放streak
ivar .dealloc
TouchInfo
我正在使用定时器来延迟streak
ivar 的发布,使用自定义定时器类如下:
到目前为止,它没有任何崩溃。但我想知道我是否做错了,是否有更好和推荐的方法。请指教。
p/s:请不要对 ARC 提出建议;我还没有自动发布手动引用计数魔法:P
objective-c - Objective-C 中神秘的 NSDictionary 发布?
我正在为 Quartz Composer 进行自定义补丁的最后润色。截至目前,我几乎已经从补丁中删除了所有内容,当我尝试 NSLog 一个 ivar 的 NSDictionary 值时,它告诉我 BAD ACCESS 崩溃了,并且在我分配它时在最后一次执行中完美运行。
我的代码如下所示:
我可以看到日志显示所有三个 NSLog 行都可以正常工作,直到 self.inputBoutData 输入。然后,我看到 self.inputBoutData 已成功复制到循环的最后 NSLog 行中的 lastBoutData 。
在下一次执行 execute:atTime:withArguments: 时,self.inputBoutData 仍然是满的,但 lastBoutData 又是空白!!!我看不出这怎么会发生。然后,它像上一个一样再运行一个循环,并成功地将 self.inputBoutData 复制到 lastBoutData,并再次记录。下一次,我在第二个 NSLog 语句之前得到了 BAD ACCESS。
我收到一些错误消息,告诉我 lastBoutData 不是 NSDictionary,所以出于绝望,我添加了一个 [lastBoutData 保留],它不会崩溃。我没有发布这个 ivar,所以我不确定我为什么要保留它。我在许多其他补丁中与其他 ivars 做非常相似的事情,没有任何问题。我会错过什么?为什么这件事会在我身上释放,或者这就是正在发生的事情?
iphone - 为 UIImageView 子类的实例变量赋予默认值
我创建了一个 UIImageView 子类。我有 .h 和 .m 文件。我的 UIImageView 子类中有一个属性。我在 UIViewController 中拖了一个 UIImageView。现在,我想给属性一个默认值。例如,我有一个枚举,根据该枚举值,我想设置我的 imageView 的图像。如何给出这个值,当我不调用 init 方法时,我直接从 xib 加载它。我坚持这一点。花了很多时间,但无法解决。
objective-c - ivar 包含什么?
在头文件中,ivar 结构具有三个成员:-
名称、类型和偏移量。
我猜名称是用于存储变量的名称。
偏移量用于存储距离结构开头的字节数。
请告诉我我对这两个是否正确?谁能解释我什么是类型?是数据类型还是范围,说明它是公共的、私有的还是受保护的。
objective-c - 为什么这个 UIView 在某些情况下不被添加为子视图,但在其他情况下呢?
我有一个 UIView viewForRootVc
,它是 UIView 子类的声明属性NewView
。初始化是NewView
的责任viewForRootVc
,但随后子类NewViewSubClass
设置其背景颜色。完成这一切后,根视图控制器RootVc
将viewForRootVc
作为子视图添加到其视图中。
但这不起作用。viewForRootVc
实际上并没有被添加。
但是,如果我执行以下三件事中的任何一项(请记住我使用的是 ARC),它确实有效:
- 我没有设置
viewForRootVc
in的背景颜色,而是将其设置为。然后,我不初始化 的实例,而是简单地初始化 的实例。NewViewSubClass
NewView
NewViewSubClass
NewView
- 在初始化
viewForRootVc
时NewView
,我调用setter(即self.viewForRootVc),而不是仅仅使用直接赋值。 viewForRootVc
在头文件中作为 ivar列出NewView
。
我不明白为什么这三件事都是必要的。
这是不起作用的代码:RootVc.m
新视图.h
新视图.m
新视图子类.m
我注意到的一件事是,如果我指定为viewForRootVc
ivar,我不需要放入.@synthesize viewForRootVc;
NewViewSubClass
我一直理解声明的属性可以有效地实现以下目标:
- 允许其他对象访问它们。
- 允许在需要时调用 setter。
- 如果不使用 ARC,如果您
retain
在属性声明中指定,调用 setter 将自动保留该属性。 - 在 ARC 下,任何声明的属性都会自动生成一个 ivar。
但显然,它的意义远不止于此。我不确定这是否是范围问题,或者我上面的非工作代码是否最终创建了两个不同的版本——也许一个具有's方法viewForRootVc
中指定的正确框架,另一个具有正确的背景颜色在's方法中指定,但两者都没有正确的框架和颜色。NewView
init
NewViewSubClass
init
我非常希望有人可以一劳永逸地为我澄清声明的属性与 ivars 的含义,以及调用 setter 来设置声明的属性与直接为其赋值。
objective-c - Objective-C:为他们制作 iVars @public 或 @synthesizing @properties?我什么时候应该使用属性?
我的类中有一些实例变量,我希望在任何地方都可以访问它们。像这样:
我可以使用如下语法从实例访问属性->
,就像我在 C++ 中所做的那样:
someString
当我想要的只是让外界可以访问它时,我应该建造一个财产吗?我将在我的界面中创建一个@property
for并在我的实现中创建它,这将使我能够使用点语法访问它。someString
@synthesize