相关疑难解决方法(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万
查看次数

@synthesized实例变量的可见性是多少?

如果您的公共界面中有属性,如下所示

@interface MyClass : NSObject
@property(strong) NSString *myProp;
@end
Run Code Online (Sandbox Code Playgroud)

然后合成它,实际上合成变量:

@implementation MyClass
@synthesize myProp = _myProp; // or just leave it at the default name..
@end
Run Code Online (Sandbox Code Playgroud)

实例变量的可见性是_myProp多少?也就是说,这是考虑过@public,@protected还是@private?我猜是因为MySubClass可以从那时继承MyClass它也会得到属性(自然),但是它还会继承实例变量可见性吗?

如果我将属性放在类扩展中会有什么不同?这会将属性隐藏在子类中,我也猜测实例变量.这记录在哪里?

cocoa encapsulation properties objective-c

16
推荐指数
1
解决办法
4126
查看次数

iOS自动@synthesize而不创建ivar

如果我有一个@property我不想通过ivar我支持的,我只是省略了@synthesize并且有手动的getter,它返回了一个计算值.

但是,现在自Xcode 4.4以来我没有指定@synthesizedo编译器会自动生成它.这是否意味着它还会生成一个ivar我不需要/使用它的偶数?

我最终可以通过使用强制不自动合成dynamic.然而,这将是错误的,因为@dynamic如果getter和setter在其他地方或运行时实现,则应该用于关闭警告.

ios ivar

15
推荐指数
1
解决办法
4429
查看次数

Objective-C:覆盖超类getter并尝试访问ivar时的编译器错误

我正在开发构建iOS 6应用程序.

我有一个类TDBeam,它继承自超类TDWeapon.

超类TDWeapon在TDWeapon.h文件中声明了@property:

@interface TDWeapon : UIView

@property (nonatomic) int damage;

@end
Run Code Online (Sandbox Code Playgroud)

我没有明确地@synthesize属性,因为我让Xcode自动这样做.

在子类TDBeam中,我覆盖了TDBeam.m文件中的getter:

#import "TDBeam.h"

@implementation TDBeam

- (int)damage {
    return _damage;
}

@end
Run Code Online (Sandbox Code Playgroud)

Xcode按预期自动完成getter方法名称.但是当我尝试引用_damage实例变量(继承自超类)时,我收到编译器错误:

Use of undeclared identifier '_damage'
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?我已经尝试显式添加@synthesize,并更改_damage ivar的名称,但编译器不会"看到"它或来自超类的任何其他ivars.我认为ivars是可见的,可以从子类访问?

properties objective-c instance-variables ios

15
推荐指数
1
解决办法
5751
查看次数