我在Xcode5中使用clang预处理了以下代码.
typedef NS_ENUM(NSInteger, MyStyle) {
MyStyleDefault,
MyStyleCustom
};
typedef NS_OPTIONS(NSInteger, MyOption) {
MyOption1 = 1 << 0,
MyOption2 = 1 << 1,
};
Run Code Online (Sandbox Code Playgroud)
得到了这个.
typedef enum MyStyle : NSInteger MyStyle; enum MyStyle : NSInteger {
MyStyleDefault,
MyStyleCustom
};
typedef enum MyOption : NSInteger MyOption; enum MyOption : NSInteger {
MyOption1 = 1 << 0,
MyOption2 = 1 << 1,
};
Run Code Online (Sandbox Code Playgroud)
我知道NS_OPTIONS用于位掩码,但是有任何技术差异吗?或者这仅仅是为了命名约定?
编辑
根据NS_OPTIONS的定义,它可能与编译器兼容.(特别是对于c ++编译器)
// In CFAvailability.h
// Enums and Options
#if (__cplusplus && __cplusplus >= 201103L && (__has_extension(cxx_strong_enums) || …Run Code Online (Sandbox Code Playgroud) 我正在使用gm并尝试根据它的大小处理图像.由于"size"getter需要回调函数,我不能在以下行中使用size.
我想做的是这样的:
function processImage(url) {
var img = gm(this.getImgStream(url));
var width, height;
img.size(function(err, val) {
width = val.width;
height = val.height;
});
// I want to use width here, but it's undefined when this line is executed.
if (width > 500) width = 500;
return img.resize(width)
}
Run Code Online (Sandbox Code Playgroud)
我想在下面的resize方法中使用width.有没有办法同步获取大小或等待回调完成?我不想尽可能长时间地使用伊娃.
我有2个类,Parent和Child,Parent有一个名为func的类方法.现在我想在func方法中获取Class实例来区分哪个类是调用者.
@interface Parent : NSObject
+ (void)func;
@end
@implementation Parent
+ (void)func {
Class *class = howToGetClass();
NSLog(@"%@ call func", class);
}
@end
@interface Child : Parent
@end
int main() {
[Child func]; // call func from Child
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在类方法中获取类实例(或类名)?
我正在尝试在iPhone项目上使用gcov并遵循此处描述的Apple的指令,但它不起作用.
当我构建并配置项目时,将为每个目标文件创建.gcda文件.但是没有执行的行被记录到.gcda文件中.(CoverStory显示所有报道均为0%)
我刚刚向模板项目添加了一个简单的类,如下所示.
@interface SomeClass : NSObject
- (void)func1:(BOOL)flag;
@end
@implementation SomeClass
- (void)func1:(BOOL)flag {
if (flag) {
NSLog(@"flag is YES");
}
else {
NSLog(@"flag is NO");
}
}
@end
Run Code Online (Sandbox Code Playgroud)
我分配了这个类并在application:didFinishLaunchingWithOptions中调用了func1,我预计会显示SomeClass的覆盖率(50%左右).
我使用的是OSX 10.6.4,iPhone SDK 4.0和Xcode 3.2.3.还需要更多配置吗?请指导.
更新2010/7/15:
我在@tonclon给我的链接中尝试了这些提示,但它还没有奏效.在下面的描述是我尝试过的.
由GCC 4.0编译的Cocoa应用程序在"Cocoa"应用程序的项目设置中,
它工作,.gcda文件是按预期生成的覆盖信息.但是在使用SDK 4.0的iPhone项目中,我无法使用相同的配置,因为gcc 4.0无法在SDK 4.0中编译某些语法(ex Blocks)
在google-tool-box中使用自定义gcov库而不是在其他链接器标志中设置-lgcov,我尝试了google-toolbox-for-mac中包含的自定义gcov库,但生成的.gcda文件显示覆盖率为0%.(同样的结果)
你能告诉我接下来应该做什么吗?任何建议表示赞赏.
我有一个NSManagedObject的子类,如下所示,并通过NSManagedObjectContext存储了一些实例.
@interface SomeModelObject : NSManagedObject @property (nonatomic, retain) NSString * text; @end
现在,我想获取按主键排序的列表(自动创建).我尝试过NSFetchRequest并遇到运行时错误:"在实体中找不到keypath id".
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeModelObject" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sort, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)
是否可以按主键排序?或者我应该在Model类中添加一些列进行排序?
我想根据用户的语言设置获取系统文件夹的本地化名称.例如,"Documents"目录以西班牙语显示"Documentos",用日语显示"书类".
有没有办法以编程方式获取这些本地化的文件夹名称?我在OSX 10.6和10.7上使用Cocoa框架.
我似乎无法在Swift 4中找到String的API.目标-C等效如下.
NSString *s = @"abcdefg";
NSString *ss = @"cde";
// just check if s contains ss
NSLog(@"%d", [s containsString:ss]);
// get range of ss in s
NSLog(@"%@", NSStringFromRange([s rangeOfString:ss]));
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
编辑:
我收到此错误消息:
test.swift:1:19: error: cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')
"abcdef".contains("cde")
Run Code Online (Sandbox Code Playgroud)
所以我没有意识到我错过了"进口基金会"......
我遇到了一个问题,即inet_ntoa会导致OSX上的分段错误,而这在Linux上不会发生.
我的测试代码如下.
// sample.c
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
//#include <arpa/inet.h> // adding this line prevents the segfault
int main() {
struct sockaddr_in addr;
struct sockaddr_in client;
int sock0 = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock0, (struct sockaddr *)&addr, sizeof(addr));
listen(sock0, 5);
while (1) {
int len = sizeof(client);
int sock = accept(sock0, (struct sockaddr *)&client, (socklen_t *)&len);
printf("accepted connection from %s, port=%d\n",
inet_ntoa(client.sin_addr), ntohs(client.sin_port));
send(sock, "HELLO", 5, 0);
close(sock); …Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么跟随我的代码崩溃吗?在foo方法中的块内发生崩溃。我有EXC_BAD_ACCESS或“对象错误:双重释放”。当我将“启用僵尸对象”设置为“开”时,我还收到了“-[NSObject description]:消息发送到已释放实例”。
@interface ViewController ()
@property (nonatomic, strong) NSObject *obj;
@end
@implementation ViewController
// just adding button
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
[btn setTitle:@"test" forState:UIControlStateNormal];
btn.frame = CGRectMake(100, 100, 100, 100);
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
// fired by button
- (void)btnAction:(id)sender {
for (int i = 0; i < 100; i++) {
[self foo];
}
}
// I want to understand this method
- (void)foo {
NSLog(@"foo");
self.obj = NSObject.new;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), …Run Code Online (Sandbox Code Playgroud)