相关疑难解决方法(0)

在cocoa objective-c类中变量前面的下划线如何工作?

我在一些iPhone示例中看到,属性在变量前面使用了下划线_.有谁知道这意味着什么?或者它是如何工作的?

我正在使用的接口文件如下所示:

@interface MissionCell : UITableViewCell {
    Mission *_mission;
    UILabel *_missionName;
}

@property (nonatomic, retain) UILabel *missionName;

- (Mission *)mission;
Run Code Online (Sandbox Code Playgroud)

我不确定上面做了什么,但是当我尝试设置任务名称时:

aMission.missionName = missionName;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

请求成员'missionName'的东西不是结构或联合

variables syntax cocoa cocoa-touch objective-c

156
推荐指数
4
解决办法
5万
查看次数

合成属性和带下划线前缀的变量:这是什么意思?

可能重复:
属性名称上的下划线前缀?

这是什么意思?@synthesize window=_window;我知道一般来说这意味着'某个类'有一个窗口,但为什么要使用_window而不仅仅是window?这是名称空间吗?

cocoa-touch properties objective-c ios

19
推荐指数
1
解决办法
1万
查看次数

(目标C)做@synthesize myvar = _myvar(如果有的话)有什么好处?

可能重复:
cocoa objective-c类中变量前面的下划线如何工作?

我不完全清楚(除了代码的可读性之外),为什么要在创建属性时创建带下划线前缀的内部变量.

由于所有内容都是在内部处理的,为什么还要这样做,因为我们不向getter和setter添加任何代码?

即使我必须向getter或setter添加一些代码,我也不明白为什么我不能只检查myvar而不是检查_myvar然后将其分配给myvar.

任何人都可以给我一些解释,除了"这样做是因为这是每个人都做的事情吗?" 我想了解这种做法背后的全部原因(即使没有getter和setter的自定义代码,这似乎也很常见).

谢谢!

objective-c

8
推荐指数
2
解决办法
1724
查看次数

self.variableName与_variableName对@sysnthesize variableName

可能重复:
cocoa objective-c类中变量前面的下划线如何工作?


注意:对于那些试图理解这一点的人来说,我想出了我的困惑的根源.在.h,我有:

...
@interface myClass : parentClass {
className *variableName:
}

@property (strong, nonatomic) className  *variableName;
...
Run Code Online (Sandbox Code Playgroud)

这导致self.variableName和_variableName是.m中的两个不同变量.我需要的是:

...
@interface myClass : parentClass {
className *_variableName:
}

@property (strong, nonatomic) className  *variableName;
...
Run Code Online (Sandbox Code Playgroud)

然后,在类'.m中,self.variableName和_variableName是等价的


在全新的Xcode的4.5+,与ARC,针对iOS 5.0及项目,有一个明显的优势(运行时的效率,速度等)使用_variableNameself.variableName与旧式@synthesize variableName

我的理解是Xcode 4.5+将创建一个_variableName相当于的默认访问器,self.variableName并且唯一不使用的原因@synthesize variableName是为了避免iVars和传入变量之间的混淆,对吗?

对我来说,只是使用self.variableName访问iVar似乎是最直接和明确的,你正在寻找哪个变量.除了打字_self.,使用是否有优势_variableName

objective-c synthesize

8
推荐指数
2
解决办法
9289
查看次数

在Objective C中命名实例变量的首选方法

可能重复:
您何时在实例变量前面加下划线?

与Objective C一样,实例变量默认受保护,您首选的方法是什么?

假设你有一个变量名,以下3种方式都有他们的支持者.

  1. _foo
  2. foo_
  3. FOO

iphone objective-c

5
推荐指数
2
解决办法
797
查看次数

为什么Xcode 4自动生成实例变量?

我来自C#开发,刚刚开始学习Objective-C和Xcode 4.据我所知,"@synthesize"正在替换属性的getter/setter方法,如果你不需要检查/控制值被读或写.

但为什么Xcode 4会自动为我创建一个实例变量?

这还不够:

@synthesize myProperty;
Run Code Online (Sandbox Code Playgroud)

代替:

@synthesize myProperty = _myProperty;
Run Code Online (Sandbox Code Playgroud)

如果我没有/需要任何getter或setter,为什么我要使用/拥有实例变量而不是实际属性?

提前致谢!

MemphiZ

编辑:

我知道@synthesize正在取代getter/setter,但这部分有什么用= _myProperty;呢:?如果我可以直接使用"myProperty",为什么我想要一个实例变量?如果setter例如检查值的条件,我会理解使用"_myProperty".如果我想跳过此检查,我会使用_myProperty.但是当我使用@synthesize时,我没有一个可以进行检查的setter.那么我为什么要/想要一个实例变量呢?

回答:

请参阅MattyG帖子中的评论!

properties objective-c ios xcode4 synthesize

5
推荐指数
1
解决办法
2852
查看次数

Objective-C中的属性声明

可能重复:
cocoa objective-c类中变量前面的下划线如何工作?

所以我发现在合成属性时你必须使用下划线,这对我来说没有任何意义.

那么,让我们开始吧.在我们的.h文件中,我们写了这一行:

@property (nonatomic) double speed;
Run Code Online (Sandbox Code Playgroud)

在我们的.m文件中,我们这样做:

@synthesize speed = _speed;
Run Code Online (Sandbox Code Playgroud)

为什么?据我所知,property生成一个实例变量并为它创建setter和getter.但到底是怎么回事

@synthesize speed = _speed 
Run Code Online (Sandbox Code Playgroud)

做?常识告诉我,我们将_speed中的值赋予速度.好的.我们在哪里宣布_speed?为什么编译器没有给我们错误?它应该是什么意思?为什么这样混淆代码?

我的问题在这里:

如果我这样做会发生什么

@synthesize speed;
Run Code Online (Sandbox Code Playgroud)

没有_speed,我会得到错误或一些错误吗?这种语法后的原因是什么?制作时他们在想什么?_speed来自哪里?它是什么?它是指针还是真正的价值?到底是怎么回事?

objective-c ios

4
推荐指数
1
解决办法
1万
查看次数