小编tai*_*ino的帖子

NS_ENUM和NS_OPTIONS有什么区别?

我在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)

cocoa objective-c ios

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

NodeJS gm同步获取图像大小

我正在使用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.有没有办法同步获取大小或等待回调完成?我不想尽可能长时间地使用伊娃.

asynchronous node.js node-imagemagick

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

Objective-c:如何在类方法中获取Class实例

我有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)

有没有办法在类方法中获取类实例(或类名)?

objective-c class-method

6
推荐指数
1
解决办法
6641
查看次数

iPhone:我怎样才能使用gcov?

我正在尝试在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给我的链接中尝试了这些提示,但它还没有奏效.在下面的描述是我尝试过的.

  1. 由GCC 4.0编译的Cocoa应用程序在"Cocoa"应用程序的项目设置中,

    • 将GCC_INSTRUMENT_PROGRAM_FLOW_ARCS设置为YES
    • 将GCC_GENERATE_TEST_COVERAGE_FILES设置为YES
    • 将其他链接器标志设置为-lgcov
    • 将C/C++编译器版本设置为4.0

    它工作,.gcda文件是按预期生成的覆盖信息.但是在使用SDK 4.0的iPhone项目中,我无法使用相同的配置,因为gcc 4.0无法在SDK 4.0中编译某些语法(ex Blocks)

  2. 在google-tool-box中使用自定义gcov库而不是在其他链接器标志中设置-lgcov,我尝试了google-toolbox-for-mac中包含的自定义gcov库,但生成的.gcda文件显示覆盖率为0%.(同样的结果)

你能告诉我接下来应该做什么吗?任何建议表示赞赏.

iphone gcov google-toolbox-for-mac

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

CoreData:如何通过主键对NSManagedObject进行排序?

我有一个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类中添加一些列进行排序?

iphone core-data objective-c

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

如何在Cocoa中获取系统文件夹的本地化名称

我想根据用户的语言设置获取系统文件夹的本地化名称.例如,"Documents"目录以西班牙语显示"Documentos",用日语显示"书类".

有没有办法以编程方式获取这些本地化的文件夹名称?我在OSX 10.6和10.7上使用Cocoa框架.

cocoa objective-c

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

如何在Swift 4中搜索字符串中的子字符串?

我似乎无法在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)

所以我没有意识到我错过了"进口基金会"......

string swift swift4

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

OSX上的inet_ntoa()分段错误

我遇到了一个问题,即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)

c sockets macos gcc

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

与iOS中的setter / getter相关的EXC_BAD_ACCESS奇怪的崩溃

有人可以解释为什么跟随我的代码崩溃吗?在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)

memory-management objective-c ios automatic-ref-counting

0
推荐指数
1
解决办法
2124
查看次数