小编e.J*_*mes的帖子

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

有什么用途:

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast
  • C风格演员 (type)value
  • 功能式演员 type(value)

如何决定在哪些特定情况下使用哪个?

c++ pointers casting c++-faq

2367
推荐指数
9
解决办法
52万
查看次数

如何在不使用VBA的情况下在Excel中执行反向字符串搜索?

我有一个包含字符串列表的Excel电子表格.每个字符串由几个单词组成,但每个字符串中的单词数不同.

使用内置的Excel函数(无VBA),有没有办法隔离每个字符串中的最后一个单词?

例子:

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!

excel excel-formula

159
推荐指数
5
解决办法
39万
查看次数

错误:可写原子属性无法将合成的setter/getter与用户定义的setter/getter配对

我最近尝试编译一个较旧的Xcode项目(曾经编译得很好),现在我看到了很多这种形式的错误:

error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter

导致这些错误的代码模式总是如下所示:

// Interface:

@property (retain) NSObject * someProperty;

// Implementation:

@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
    //..
}
Run Code Online (Sandbox Code Playgroud)

我可以看到为什么会生成错误.我告诉编译器合成我的属性访问器(getter和setter),然后立即手动覆盖setter.那段代码总是闻到一点点气味.

那么,这样做的正确方法是什么?如果我使用@dynamic而不是@synthesize,我将不得不写入getter.这是唯一的方法吗?

compiler-construction xcode properties objective-c

127
推荐指数
3
解决办法
3万
查看次数

使用常量NSString作为NSUserDefaults的键

我正在使用NSUSerDefaults存储用户首选项.我记得在某处将键设置为常量是一个好主意 - 我同意.以下代码是我目前拥有的代码:

[[NSUserDefaults standardUserDefaults]
        setObject:[NSNumber numberWithInt:polygon.numberOfSides] 
           forKey:@"polygonNumberOfSides"];
Run Code Online (Sandbox Code Playgroud)

我尝试将其更改为:

@implementation Controller

NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";

-(void)savePolygonInfo {
    [[NSUserDefaults standardUserDefaults]
            setObject:[NSNumber numberWithInt:polygon.numberOfSides] 
               forKey:kPolygonNumberOfSides];
}
Run Code Online (Sandbox Code Playgroud)

虽然这确实有效,但它会产生" warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type".我很想让我的代码免受编译器警告的影响.我该如何修复此警告?

cocoa objective-c default-value

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

如何处理@synthesized的版本保留属性?

我对Objective-C中的合成属性有一些疑问.完整列表如下,但基本问题是:编译器如何确保正确释放合成属性的ivars,即使我的代码可能包含或不包含dealloc中的release方法?

注意:我决定不将这些问题作为单独的问题发布,因为它们密切相关,并且因为有一些现有的问题涉及到个别问题,而没有真正了解问题的核心.

有些类似的问题:


设置:考虑具有单个属性的类:

@interface Person : NSObject
{
    NSString * name;
}
@property (nonatomic, retain) name;
@end
Run Code Online (Sandbox Code Playgroud)

问题#1:最基本的案例:

@implementation Person
@synthesize name;
@end
Run Code Online (Sandbox Code Playgroud)

通过这种设置,我假设name每当一个Person对象被释放时它将自动释放.在我看来,编译器只是插入[name release]dealloc方法中,就像我自己键入它一样.那是对的吗?


问题2:如果我选择dealloc为这个类编写我自己的方法,并且我省略了一个调用[name release],那会泄漏吗?

@implementation Person
@synthesize name;
- (void)dealloc { [super dealloc]; }
@end
Run Code Online (Sandbox Code Playgroud)

问题3:如果我选择dealloc为这个类编写我自己的方法,并且我包含一个调用[name release],那会导致双重释放,因为@synthesize已经为我处理了它吗?

@implementation Person
@synthesize name;
- (void)dealloc { [name release]; …
Run Code Online (Sandbox Code Playgroud)

compiler-construction memory-management properties objective-c

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

是否有一种"正确"的方式让NSTextFieldCell绘制垂直居中的文本?

我有NSTableView几个文本列.默认情况下,dataCell这些列是Apple NSTextFieldCell类的一个实例,它可以执行各种奇妙的操作,但它会绘制与单元格顶部对齐的文本,并且我希望文本在单元格中垂直居中.

有一个内部标志NSTextFieldCell可以用来垂直居中文本,它工作得很漂亮.但是,由于它是一个内部标志,它的使用不受Apple的批准,它可能会在未来的版本中消失而不会发出警告.我目前正在使用这个内部标志,因为它简单而有效.Apple显然花了一些时间来实现这个功能,所以我不喜欢重新实现它的想法.

所以; 我的问题是:实现与Apple的NStextFieldCell完全相同的行为的正确方法是什么,但是绘制垂直居中的文本而不是顶部对齐?

为了记录,这是我目前的"解决方案":

@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end

@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
    @try { _cFlags.vCentered = centerVertical ? 1 : 0; }
    @catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end
Run Code Online (Sandbox Code Playgroud)

使用如下:

[[myTableColumn dataCell] setVerticalCentering:YES];
Run Code Online (Sandbox Code Playgroud)

customization cocoa vertical-alignment nstextfieldcell

50
推荐指数
3
解决办法
2万
查看次数

在哪里可以找到与Cocoa的NSEvent类一起使用的密钥代码列表?

我正在寻找可以与Cocoa NSEvent类一起使用的可用密钥代码的完整列表.的NSEvent类有一个keyCode属性,该属性被定义为unsigned short.以下代码放置在适当的UI对象中时,将在按下键代码时回显它们:

- (void)keyDown:(NSEvent *)theEvent
{
    NSLog(@"%d", [theEvent keyCode]);
}
Run Code Online (Sandbox Code Playgroud)

从这段代码中,我可以很容易地看到哪些代码与某些键匹配,但我想找到一个列出所有代码的官方文档.我希望Apple有一个头文件,看起来像这样:

enum {
    ...
    NSKeyCodeLeftArrow = 123,
    NSKeyCodeRightArrow = 124,
    ...
};
Run Code Online (Sandbox Code Playgroud)

但如果有的话,我还没有找到它.

keyboard events cocoa

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

如何告诉我的Cocoa应用程序从应用程序本身退出?

我正在寻找一种告诉我的Cocoa应用程序退出的好方法.请放心,这不会用于生产代码.我只是在寻找一种简单的方法来运行一个测试,然后在调试期间关闭应用程序.

我发现exit(0);将关闭应用程序,但它绕过了所有正常的应用程序退出程序,我想保留所有这些程序.

基本上我想让事情好像用户从菜单中拉出"退出",但我希望它在我完成测试后自动发生.

我的代码目前看起来像这样:

#if (SUPERFANCY_TESTING_MODE)
    [self doSomething];
    exit(0); // <-- I need something better to go here
#endif
Run Code Online (Sandbox Code Playgroud)

debugging cocoa exit

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

有没有相当于NSTokenField控件的iPhone?

在我的应用程序中,我希望用户在UITextField(或等效文件)中键入名称,然后当他们按下返回时,它会将该单词放在通常与标签相关联的蓝色气泡中.然后光标移动到可以添加更多"标签"的末尾.

在Mail应用程序的To,CC和BCC字段中添加联系人时,以及在Messages应用程序中选择联系人时,可以看到这一点.

这是怎么做到的?它是UIKit中提供的还是其他地方提供的东西?

非常感谢,

迈克尔

iphone input uitextfield uitextview

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

在XCode中,有没有办法在调用NSLog时禁用调试器控制台中出现的时间戳?

XCode的调试器控制台可以很容易地看到我的应用发出的任何调试消息NSLog(),但它总是在它们上面添加一个时间戳前缀:

2009-08-30 04:54:48.128 MyApp[94652:a0f] some log message
2009-08-30 04:54:50.647 MyApp[94652:a0f] another log message
...
Run Code Online (Sandbox Code Playgroud)

我没有使用这个前缀,它占用了很多空间.我有一种感觉它被硬编码到Apple的日志记录系统中,但以防万一有一个解决方案:

我可以让调试器控制台显示没有时间戳前缀的日志消息吗?

像这样的东西是完美的:

some log message
another log message
...
Run Code Online (Sandbox Code Playgroud)

debugging console settings xcode

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