相关疑难解决方法(0)

在C++标识符中使用下划线有哪些规则?

在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.

C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?

c++ standards naming-conventions c++-faq

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

NSString属性:复制还是保留?

比方说,我有一个叫做类SomeClassstring属性名称:

@interface SomeClass : NSObject
{
    NSString* name;
}

@property (nonatomic, retain) NSString* name;

@end
Run Code Online (Sandbox Code Playgroud)

我知道可能会指定名称,NSMutableString在这种情况下,这可能会导致错误的行为.

  • 对于字符串一般来说,使用属性是否总是一个好主意copy而不是retain
  • "复制"属性是否比这种"保留"属性效率低?

cocoa cocoa-touch objective-c

330
推荐指数
5
解决办法
13万
查看次数

在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万
查看次数

cellForRowAtIndexPath:未调用

我的应用程序有两种状态:登录和未登录,我有以下架构(大大简化):
- ViewController A包含一个搜索框和一个表视图.
- ViewController B,用于登录应用程序.

流程如下:
- 用户未登录;
- A被推入堆栈.在viewWillAppear我检查,如果用户在如果是,一个异步网络请求正在取得,一旦做到这一点登录,该表加载来自网络的数据.但是,由于此时用户未登录,因此表视图为空;
- 用户点击搜索框; 因为他没有登录,B被推(确认后);
- 他在B中成功登录,然后按下弹出B的按钮并再次显示A;
- 在这个时间点,因为他已登录,从viewWillAppear我做异步请求;
- 完成后,我调用reloadData表格视图.

我注意到的numberOfRowsInSection:是调用它并返回正确的结果,但cellForRowAtIndexPath:之后不会调用它并且表保持为空.

我已经检查并reloadData在主线程上调用了.

知道它能是什么吗?因为它让我疯了!

谢谢,
S.

编辑:这是viewWillAppearA 中代码的异步位.

if ([User isLoggedIn]) {
    [self.asyncRequest fetchDataWithCompletionHandler:^(id response, NSError *error) {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        if (error) {
            [Utils displayError:error];
        } else {
            self.array = response;

            self.isLoaded = YES;
            [self.tableView reloadData];
            [self.tableView setContentOffset:CGPointMake(0.0f, 0.0f) animated:NO];
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过异步请求是否成功完成并且 …

iphone uitableview ios

66
推荐指数
9
解决办法
5万
查看次数

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

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

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

cocoa-touch properties objective-c ios

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

Objective-C属性和综合逻辑

什么是实例变量的实际名称,比如topSpeed,来自斯坦福大学关于Objective-C和iOS开发的讲座?

这是代码:

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

看看这段代码我会认为我在类中定义了一个变量topSpeed.我无法理解为什么它会自动声明名称与变量名称相同的getter方法 - topSpeed?

另一个问题是我们何时使用

@synthesize topSpeed = _topSpeed
Run Code Online (Sandbox Code Playgroud)

如果我们看一下@synthesize会产生什么:

- (double) setTopSpeed:(double)speed
{
   _topSpeed = speed;
}


- (double) topSpeed
{
   return _topSpeed;
}
Run Code Online (Sandbox Code Playgroud)

什么是_topSpeed,什么是topSpeed?我已经声明了一个变量topSpeed,而不是_topSpeed.如果我不使用属性变量名是什么怎么办?

properties objective-c

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

属性名称上的下划线前缀?

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

任何人都可以向我指出使用下划线的解释,我一直认为它们用于突出显示您正在访问iVar [_window release];而不是通过setter/getter方法访问iVar,[[self window] release];或者[self.window release];我只是想验证我的理解是正确.

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UILabel *markerLabel;

@synthesize window = _window;
@synthesize markerLabel = _markerLabel;
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c

11
推荐指数
2
解决办法
7140
查看次数

(目标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
查看次数

目标C中界面下的声明

我正在研究Big Nerd Ranch的Objective C编程书.我看到了如下代码:

@interface BNREmployee : BNRPerson
{
    NSMutableArray *_assets;
}


@property (nonatomic) unsigned int employeeID;
@property (nonatomic) unsigned int officeAlarmCode;
@property (nonatomic) NSDate *hireDate;
@property (nonatomic, copy) NSArray *assets;

-(double)yearsOfEmployment;
-(void)addAsset:(BNRAsset *)a;
-(unsigned int)valueOfAssets;
Run Code Online (Sandbox Code Playgroud)

在这段代码中,为什么要NSMutableArray *_assets在界面下声明?这与将其宣布为财产有何不同,它的目的是什么?

最后,我看到有NSArray *assets一处房产.这跟基本相同NSMutableArray *_assets吗?

objective-c ios

8
推荐指数
1
解决办法
156
查看次数