- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 iOS 新手,所以慢慢来。当我在我的 .h View Controller 中声明一个名为“_a”的对象并声明一个属性“a”时,当我在 .m 文件中进行合成时
@synthesize a=_a;
当我修改那个对象时我必须使用“a”或“_a”吗? (在我的例子中,“a”是一个 UINavigationController)。
在另一个问题中,我的编译器是否会自动绘制从声明为“ob”的对象到“_ob”声明的连接?
再次,对于糟糕的解释感到抱歉,但这种环境不是我习惯的。
最佳答案
这样声明的对象:
@interface Example : NSObject {
NSObject *_a;
}
@property (retain) NSObject *a;
@end
然后这样实现:
#import "Example.h"
@implementation Example
@synthesize a = _a;
@end
在 Example
对象中创建一个名为 _a
的 ivar 和两个访问器方法。访问器方法具有以下签名:
- (NSObject *)a;
- (void)setA:(NSObject *)theA;
方法 a
返回 _a
ivar 中的对象。方法setA
释放_a
中存储的对象(如果不为nil),将参数赋值给_a
,并发送参数anretain
消息。
这些方法也可以通过点符号访问:
Example *e = [[Example alloc] init];
// These two are equivalent.
e.a = anotherNSObject;
[e setA:anotherNSObject];
// These two are equivalent.
anotherNSObject = e.a;
anotherNSObject = [e a];
直接访问_a
会绕过访问器方法,可能导致内存泄漏等问题。例如,如果 _a
持有一个对象的唯一引用,并且一个新的对象引用被分配给 _a
,旧对象将成为泄漏对象。
直接回答你的两个问题:
您可以使用a
或_a
。在大多数情况下,在读取声明 a
和 setA
(或 a
点号)设置_a
的值时。使用 Example
对象的对象应该使用访问器方法(带或不带点符号)。
编译器不会自动在 ob
和 _ob
声明之间建立连接。在此示例中,@synthesize a = _a;
语句与可选的 = _a
建立连接。 ivar 可以有任何名称。 @synthesize a = george;
也是有效的。如果没有 = _a
部分,编译器将创建一个名为 a
的 ivar 和两个访问器方法。
进一步注意:您可以在接口(interface)中省略 _a
的声明,这将 _a
ivar 的范围限制为仅实现 Example 对象。将可选的 = _a
添加到 @synthesize
语句将生成与接口(interface)中声明的属性相同类型的 as ivar。
关于objective-c - 名为 "a"的对象和名为 "_a"的对象之间是否存在链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6437517/
我是一名优秀的程序员,十分优秀!