小编K J*_*K J的帖子

Objective-C:ARC中的块

我正在转换到ARC(自动引用计数),这个文档非常有用:转换到ARC发行说明.它说:

块如何在ARC中工作?

在ARC模式下向块传递块时块"正常工作",例如在返回中.您不必再调用Block Copy.将堆栈"向下"传递给arrayWithObjects:以及其他执行保留的方法时,仍然需要使用[^ {} copy].

有人可以详细说明这一点或举一些例子吗?我明白这通常意味着我不需要再进行[块复制],即使块在声明的范围之外使用,因为ARC现在会更加巧妙地处理它,但我仍然需要在我想要时复制它将块传递给保留它的函数.它是否正确?

实际上我已经尝试了一点点,到目前为止,即使我没有复制将块传递给数组也没关系,所以这个问题.谢谢!

objective-c objective-c-blocks automatic-ref-counting

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

libxml2无法正确处理HTML中的CDATA

我正在使用libxml2.2.7.3来解析html页面,并且我很难在HTML中使用CDATA正常工作.这是代码:

xmlDocPtr doc = htmlReadMemory(data, length, "", NULL, 0);
xmlBufferPtr buffer = xmlBufferCreate();
xmlNodeDump(buffer, doc, doc->children, 0, 0);
printf("%s", (char*)buffer->content);
Run Code Online (Sandbox Code Playgroud)

和HTML数据:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><body>
  <div>
    <script type="text/javascript"> 
    //<![CDATA[
      document.write('</div>');
    //]]>
    </script>
  </div>
</body></html>
Run Code Online (Sandbox Code Playgroud)

解析器错误地将引号内的</ div>识别为真正的html标记,并打印出错误消息,如下所示:

:8: HTML parser error : Unexpected end tag : script
    </script>
             ^
:9: HTML parser error : Unexpected end tag : div
  </div>
        ^

打印出来的结果和调试也意味着解析出错了:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><body>
  <div>
    <script type="text/javascript"><![CDATA[ …

html xml html-parsing libxml2

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

在 HTTP multipart/form-data 内容类型中转义 CRLF (iOS)

我正在尝试使用 multipart/form-data 内容类型发布文件,我得到了这个问题:
当我写入文件内容时,我不应该转义 CRLF 吗?我在网上找到了一段代码,我认为它可能是错误的:

NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL: url];
[req setHTTPMethod: @"POST"];

NSString* contentType = @"multipart/form-data, boundary=AaB03x";
[req setValue:contentType forHTTPHeaderField: @"Content-type"];

NSData* boundary = [@"\r\n--AaB03x\r\n" dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *postBody = [NSMutableData data];
[postBody appendData: boundary];
[postBody appendData: [@"Content-Disposition: form-data; name=\"datafile\"; filename=\"t.jpg\"" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData: [@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData: imageData];
[postBody appendData: boundary];
[req setHTTPBody:postBody];
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为 imageData 可能包含 \r\n 序列,对吧?如果是这样,有没有办法在原始数据中转义 CRLF?或者我错过了什么?

提前致谢!

iphone http multipartform-data ios

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

Java:接口中的受保护方法

好吧,我知道这个问题已经被问过几次了,但我需要针对我的具体情况的建议。有 Encodable 和 Decodable 之分,消息既是 Encodable 又是 Decodable:

interface Encodable { void encode(); }
interface Decodable { void decode(); }
class Message implements Encodable, Decodable { ... }

void processEncodable(Encodable encodable) {
  ...
  encodable.encode();
  ...
}
Run Code Online (Sandbox Code Playgroud)

除了 Message 之外,还有其他 Encodable(和 Decodable),它们需要在 processEncodable 中进行处理。到目前为止一切顺利,但问题是我想从包外部隐藏encode()和decode(),并且Java接口不允许受保护/私有方法。有人可能会建议抽象类,但正如您所看到的,Message 应该同时继承 Encodable 和 Decodable,所以情况并非如此。有什么建议么?

这些天我非常喜欢 Scala,Scala 特征允许受保护/私有方法,恕我直言,这更直观。我已经浏览了一些提到Java接口设计理念的答案,但我真的不明白为什么如果引入接口作为多重继承的替代方案,那么它不应该允许受保护的方法,而抽象类则允许......

java oop access-modifiers

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

Scala:隐式参数中的错误

以下是我真正问题的简化版本:

class Z[T]
object E extends Enumeration {
  implicit val z = new Z[Value] 
  val X, Y = Value
}
implicit def f[T : Z] = (getter: T) => 0
implicit def o[T](v: Option[T])(implicit toInt: T => Int) = 0
def e: Option[E.Value] = null
val b: Int = e
Run Code Online (Sandbox Code Playgroud)

这有效,b隐式转换为o(e)(f(Ez)).但随着以下小变化:

implicit def f[T : Z] = (setter: T => Unit) => 0
implicit def o[T](v: Option[T])(implicit toInt: (T => Unit) => Int) = 0
Run Code Online (Sandbox Code Playgroud)

它找不到合适的隐含值Ez,尽管与原始代码没有本质区别,而手动显式转换为o(e)(f(Ez))仍然有效.

我知道隐式参数的实现还没有完成,还有很多未解决的问题.如果这是其中之一,我想向Scala贡献者报告.所以我的问题是,a)这真的是一个错误吗?b)如果是这样,我在哪里以及如何提交错误以便将来修复?

UPDATE

特拉维斯的回答就像一个魅力!顺便说一下,上面的代码解决了我原来的问题:

implicit …
Run Code Online (Sandbox Code Playgroud)

scala implicit-conversion

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

ANTLR词法分析器根本无法预测

我有以下语法:

rule: 'aaa' | 'a' 'a';
Run Code Online (Sandbox Code Playgroud)

它可以成功解析字符串'aaa',但它无法解析'aa'并出现以下错误:

line 1:2 mismatched character '<EOF>' expecting 'a'
Run Code Online (Sandbox Code Playgroud)

仅供参考,这是词法分析器的问题而不是解析器,因为我甚至没有调用解析器.主要功能如下:

@members {
  public static void main(String[] args) throws Exception {
    RecipeLexer lexer = new RecipeLexer(new ANTLRInputStream(System.in));
    for (Token t = lexer.nextToken(); t.getType() != EOF; t = lexer.nextToken())
      System.out.println(t.getType());
  }
}
Run Code Online (Sandbox Code Playgroud)

结果与更明显的版本相同:

rule: AAA | A A;
AAA: 'aaa';
A: 'a';
Run Code Online (Sandbox Code Playgroud)

显然,ANTLR词法分析器尝试将输入'aa'与失败的规则AAA匹配.除了ANTLR是一个LL(*)解析器或其他什么,词法分析器应该与解析器分开工作,它应该能够解决歧义.语法在良好的旧lex(或flex)下运行良好,但在ANTLR中似乎没有.那么这里的问题是什么?

谢谢您的帮助!

antlr lex lexer antlr3

4
推荐指数
1
解决办法
2269
查看次数

Scala:编译器可以有效地优化常量吗?

我们考虑以下几点:

object Foo {
  val BUFFER_SIZE = 1024
}

class Foo {
  .
  .
  .

  val buffer = new Array[Byte](Foo.BUFFER_SIZE)
Run Code Online (Sandbox Code Playgroud)

与Java的静态(最终)变量相比,这太冗长了,似乎并不优雅,特别是因为常量的定义和用法太远,无法立即理解代码.我想要的是这样的:

class Foo {
  val BUFFER_SIZE = 1024

  val buffer = new Array[Byte](BUFFER_SIZE)
Run Code Online (Sandbox Code Playgroud)

问题是,Scala编译器是否足够聪明,不能为每个Foo实例实例化BUFFER_SIZE以浪费时间和空间?或者应该与第一个一起去?

optimization scala scala-compiler

4
推荐指数
1
解决办法
268
查看次数

Scala:下划线的另一种用法?

我正在查看scala actors库,在那里我找到了以下代码:

private[scheduler] trait TerminationMonitor { 
    _: IScheduler =>

    protected var activeActors = 0 
    ...
Run Code Online (Sandbox Code Playgroud)

问题是_的含义是什么:IScheduler =>在这里?
我是Scala的新手,让我感到困惑的是,下划线有很多不同的含义.

感谢您的帮助!

scala

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

Scala:corePoolSize最大化Actor性能

我正在尝试基于经典工作池模型创建一个Scala应用程序服务器.鉴于:

  1. 这台机器有一个四核处理器
  2. 有一个调度程序actor,专门用于阻止网络I/O监听
  3. 工人演员都是非阻挡的.

corePoolSize最大化性能的最佳价值是什么?理想情况下,当工作线程池的大小等于处理器核心数时,性能最大化.所以在这种情况下,我猜最好的值是5(调度程序为1,工作程序为4),或者我可以将值设置为4并覆盖调度程序actor的调度程序方法,这样它就不会与工作人员共享线程池.

它是否正确?任何建议表示赞赏 谢谢!

multithreading scala actor

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