小编Ben*_*hen的帖子

@符号在objective-c中代表什么?

我正在学习objective-c并不断碰到@符号.它用于不同的场景,例如在字符串的开头或合成访问器方法.

@符号在objective-c中的含义是什么?

objective-c

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

字符串常量和字符串文字之间有什么区别?

我正在学习Objective-C和Cocoa并且遇到过这样的声明:

Cocoa框架期望全局字符串常量而不是字符串文字用于字典键,通知和异常名称,以及一些带字符串的方法参数.

我只使用更高级别的语言,所以从来没有必要考虑字符串的细节.字符串常量和字符串文字之间有什么区别?

string objective-c

59
推荐指数
2
解决办法
4万
查看次数

如何理解线性分区中的动态编程解决方案?

我正在努力理解线性分区问题的动态编程解决方案.我正在阅读算法设计手册,问题在8.5节中描述.我已经无数次阅读了这个部分,但我只是没有得到它.我认为这是一个糟糕的解释(我现在读到的内容已经好多了),但是我还没有能够很好地理解这个问题以寻找替代解释.欢迎链接到更好的解释!

我找到了一个页面,其中包含类似于本书的文本(可能来自本书的第一版):分区问题.

第一个问题:在本书的示例中,分区从最小到最大排序.这只是巧合吗?从我可以看出,元素的排序对算法并不重要.

这是我对递归的理解:

让我们使用以下序列并将其分为4:

{S1...Sn} =  100   150   200   250   300   350   400   450   500
k = 4
Run Code Online (Sandbox Code Playgroud)

第二个问题:这就是我认为递归将如何开始 - 我理解正确吗?

第一次递归是:

100   150   200   250   300   350   400   450 | 500 //3 partition to go
100   150   200   250   300   350   400 | 450 | 500 //2 partition to go 
100   150   200   250   300   350 | 400 | 450 | 500 //1 partition to go
100   150   200   250   300 | 350 | …
Run Code Online (Sandbox Code Playgroud)

algorithm partitioning dynamic-programming

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

为什么使用select()而不是sleep()?

我正在编写一个关于iPhone音频的章节,并且遇到了一段我无法理解的代码:

while (aqc.playPtr < aqc.sampleLen) 
{
    select(NULL, NULL, NULL, NULL, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

(完整代码示例在第163-166页).根据我对代码的理解,音频正在另一个线程上处理,而while循环就是为了防止主线程在音频仍在处理时终止.

我不明白的是为什么select()要用来代替sleep().

从我所读到select()的用于监视I/O的变化并传递它的NULL并没有做任何有意义的事情.我已经运行了代码sleep(),它按预期工作.(我对低级别POSIX的了解几乎不存在.)

c multithreading posix

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

Xcode 4,子项目导入问题

我想将项目添加为子项目.当我将子项目拖到主项目中时,它显示为文件引用而不是子项目.下图解释了问题:

Xcode子项目导入问题

xcode project-organization

12
推荐指数
1
解决办法
1636
查看次数

声明常量指针的最明确方法是什么?

我正在使用一对使用指针作为唯一键的函数.我想声明一个常量指针用作键.这样做最安全,最清晰的方法是什么?

这里有两种可能的方法,但两者都有缺点.

  1. 自引用指针:

    static const void * const propertyKey = &propertyKey;
    //...
    objc_getAssociatedObject(object, propertyKey);
    
    Run Code Online (Sandbox Code Playgroud)

    缺点:宣言长而可怕!很容易混淆那些不知道它是什么的人.好处:一旦你了解它的功能就很难用,它很容易使用.

  2. 应该引用的静态const:

    static const char propertyKey;
    //...
    objc_getAssociatedObject(object, &propertyKey);
    
    Run Code Online (Sandbox Code Playgroud)

    缺点:使用时必须引用变量而不是简单地使用变量,这很容易被忽略(但编译器应该将其指出为类型不匹配).如果声明被修改以便分配一个值,那么它可能会产生灾难性的影响,因为无法再保证指针的唯一性.好处:宣言更容易理解.

我不认为其中任何一个都是显而易见的.有更好的建议吗?

c pointers coding-style

11
推荐指数
1
解决办法
437
查看次数

在iOS中解析XML /'屏幕抓取'的最佳方法是什么?UIWebview还是NSXMLParser?

我正在创建一个需要从网页获取一些数据的iOS应用程序.我的第一个是使用NSXMLParser initWithContentsOfURL:和解析NSXMLParser代表的HTML .然而,这种方法似乎很快就会变得痛苦(例如,如果改变了HTML,我将不得不重写解析代码,这可能很尴尬).

看到我正在加载一个网页,我也看了一下UIWebView.看起来UIWebView可能是要走的路.stringByEvaluatingJavaScriptFromString:似乎是一种非常方便的方法来提取数据,并允许将javascript存储在一个单独的文件中,如果HTML发生变化,该文件很容易编辑.然而,使用UIWebView似乎有点hacky(看作UIWebView是一个UIView子类,它可能会阻止主线程,并且文档说javascript有10MB的限制).

在我遇到困难之前,有没有人对解析XML/HTML有任何建议?

更新:

我写了一篇关于我的解决方案的博客文章:iOS中的HTML解析/屏幕抓取

iphone screen-scraping uiwebview nsxmlparser ios

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

正则表达式非捕获javascript中的组

我的正则表达式和javascript上有点生疏.我有以下字符串var:

var subject = "javascript:loadNewsItemWithIndex(5, null);";
Run Code Online (Sandbox Code Playgroud)

我想5使用正则表达式提取.这是我的正则表达式:

/(?:loadNewsItemWithIndex\()[0-9]+/)
Run Code Online (Sandbox Code Playgroud)

应用如下:

subject.match(/(?:loadNewsItemWithIndex\()[0-9]+/)
Run Code Online (Sandbox Code Playgroud)

结果是:

loadNewsItemWithIndex(5
Run Code Online (Sandbox Code Playgroud)

什么是最简洁,最可读的提取方式5?是否可以通过loadNewsItemWithIndex(从匹配中排除而不是匹配5作为子组来完成此操作?

javascript regex

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

是否可以在`NSFetchRequest`中按子类排序而不添加其他属性?

我想NSFetchRequest按实体对结果进行分组.实体都共享相同的抽象父级.例如:

animal
|
|-cat
|
|-dog
Run Code Online (Sandbox Code Playgroud)

NSFetchRequestincludesSubentities设定TRUEentity设定animal.它可以设置sectionNameKeyPathNSFetchedResultsController来的entity.name,但它是不可能做的一样sortDescriptors的的NSFetchRequest由于事实sortDescriptors是(在数据库中的数据,即,在不类方法)应用到存储的属性.因此,按实体类型分组的唯一方法是向超类添加属性,子类可以使用该属性来标识自己.

这似乎很疯狂,因为它破坏了继承的有用性.我查看了SQLite数据库,实体类型与属性存储在同一个表中,因此所需的数据已经存在.

总结:是否可以在NSFetchRequest不添加其他属性的情况下按子类排序?

iphone core-data nsfetchrequest ios

7
推荐指数
1
解决办法
659
查看次数

如何将AudioFilePlayer AudioUnit连接到3DMixer?

我正在尝试将AudioFilePlayer AudioUnit连接到AU3DMixerEmbedded Audio Unit,但我没有成功.

这是我正在做的事情:

  1. 创建一个AUGraphNewAUGraph()

  2. 打开图表

  3. 初始化图表

  4. 添加3个节点:

    • outputNode: kAudioUnitSubType_RemoteIO
    • mixerNode: kAudioUnitSubType_AU3DMixerEmbedded
    • filePlayerNode: kAudioUnitSubType_AudioFilePlayer
  5. 连接节点:

    • filePlayerNode - > mixerNode
    • mixerNode - > outputNode
  6. 配置filePlayer音频单元以播放所需的文件

  7. 启动图表

这不起作用:它在AUGraphInitialize上出错,错误为10868(kAudioUnitErr_FormatNotSupported).我认为问题是由于filePlayer和混音器之间的音频格式不匹配.我认为这是因为: - 如果我注释掉将filePlayerNode连接到mixerNode(AUGraphConnectNodeInput(_graph, filePlayerNode, 0, mixerNode, 0))并注释掉第6步,那么就不会报告任何错误.- 如果我将filePlayerNode直接连接到outputNode(AUGraphConnectNodeInput(_graph, filePlayerNode, 0, outputNode, 0))来替换步骤3,则播放音频.

在将filePlayerNode连接到mixerNode时我缺少哪些步骤?

这是完整的代码.它基于Apple的示例代码和我从互联网上找到的其他样本.(AUGraphStart后称):

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        {
            //create a new AUGraph
            CheckError(NewAUGraph(&_graph), "NewAUGraph failed");        
            // opening the graph opens all contained audio units but does …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch core-audio audiounit ios

7
推荐指数
1
解决办法
3006
查看次数