小编Man*_*nav的帖子

什么是PurpleEventCallback?

在我的iPhone应用程序的堆栈跟踪中,我看到一个叫做调用的东西PurpleEventCallback.我无法找到任何文件.这是什么?

PurpleEventCallback

iphone xcode stack-trace ios

52
推荐指数
2
解决办法
2711
查看次数

为什么C没有逻辑赋值运算符?

我需要编写表单的声明

a = a || expr;
Run Code Online (Sandbox Code Playgroud)

expr应该在哪里评估,并将结果分配给aiff a未设置.这取决于逻辑OR的短路能力.

当然,写上述内容的时间更短

a ||= expr;
Run Code Online (Sandbox Code Playgroud)

但是(令我惊讶的是)C没有逻辑赋值运算符.

所以我的问题是双重的.首先,是否有一种更短的方式来编写标准C中的第一个语句(三元运算符更糟糕 - a = a ? a : expr需要我拼出a三次).

其次,为什么C中没有逻辑分配?我能想到的可能原因是:

  • 它使语法难以解析?
  • 处理这些案件的短路有一些微妙之处吗?
  • 它被认为是多余的(但这不是反对所有运营商任务的论据吗?)

编辑

请解锁这个问题因为:

  • 与之相关的问题(作为所谓的副本)尚未得到回答.该问题的(已接受)答案表明,||=由于重复了该功能,因此不存在|=.这是错误的答案.|=不会短路.

  • C和C++不是同一种语言.我想知道为什么C没有它.实际上,像C++这样的派生语言,特别是Java(没有像Edmund的答案中提到的遗留代码问题那样)的问题使得这个问题更加有趣.

编辑2

现在看起来我原来的意图是错的.在语句中a = a || expr(其中a是积分并expr返回一个整数值,首先两者a并将expr隐式转换为"布尔值",然后将"布尔"值赋值给a.这将是不正确的 - 积分值将丢失.谢谢,詹斯和埃德蒙.

所以对于问题的第一部分,编码我的意图的正确方法,而不是替代方法:)将是:

if (!a) a = expr;
Run Code Online (Sandbox Code Playgroud)

要么

a = a ? a : expr;
Run Code Online (Sandbox Code Playgroud)

他们应该优化相同(我认为)虽然我个人更喜欢第一个(因为它有一个较少a的类型). …

c logical-operators

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

JSON无法解决的问题:为什么这么严重?

在阅读了这个问题之后,为什么google/facebook等添加了无法解决的问题:

  • while(1);
  • for(;;);
  • &&&START&&& ... &&&END&&&
  • 1和3组合

对他们的JSON回应,我已经理解了动机.但是,我仍然不清楚为什么会使用这种相对复杂的机制,当类似的效果可以用类似的东西来实现

  • )在开头添加额外的内容,使整个行无效,语法错误
  • 将JSON包装在注释中

现在,似乎这种无限循环和(奇怪的)语法错误的附加保护将是绕过旧的和允许的javascript解析器,但我似乎找不到任何引用,表明情况就是这样.还有另一个SO问题甚至消除了while(1);解决方法(说明1可能被破坏)并拒绝表单的另一种解决方法{}&&,但没有解释为什么或引用任何来源.

其他参考:

javascript security json

26
推荐指数
1
解决办法
2021
查看次数

数组超出界限:与未定义或长度检查的比较?

这似乎是一个常见的JavaScript用法:

function foo (array, index) {
    if (typeof array[index] == 'undefined')
        alert ('out of bounds baby');
}
Run Code Online (Sandbox Code Playgroud)

而不是更普遍(在其他语言中)和概念上更简单:

function foo (array, index) {
    if (index >= array.length)
        alert ('boo');
}
Run Code Online (Sandbox Code Playgroud)

据我所知,第一种情况也适用于其中有"间隙"的阵列,但这是一个足以保证成语的常见情况吗?

可以在此处看到提示此问题的代码示例.在这种情况下,当在函数内部使用'argument'变量时,假设它是一个连续的数组是不是很明智?

javascript arrays

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

暴露于Objective-C代码时Swift类的名称不尊重@objc重命名

给出一个类似Swift类的声明

@objc(NSFoo) public class Foo {
   public func bar() -> () {}
}
Run Code Online (Sandbox Code Playgroud)

从我对文档的阅读中可以看出,在Objective-C方面,我们可以使用标识符来引用这个类NSFoo.这似乎不适合我.生成的定义ProjectName-Swift.h是:

SWIFT_CLASS("NSFoo")
@interface Foo
- (void)bar;
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)

而我所期待的是

SWIFT_CLASS("Foo")
@interface NSFoo
...
Run Code Online (Sandbox Code Playgroud)

我正在使用Xcode 6.0.1.

我错过了什么,或者这只是一个Xcode错误?

xcode swift

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

C:为什么从void指针转换为函数指针未定义?

可能重复:
为什么函数指针和数据指针在C/C++中不兼容?

在dlsym的手册页中,提供了以下代码段.

       double (*cosine)(double);

       handle = dlopen("libm.so", RTLD_LAZY);
       /* Writing: cosine = (double (*)(double)) dlsym(handle, "cos");
          would seem more natural, but the C99 standard leaves    
          casting from "void *" to a function pointer undefined.  
          The assignment used below is the POSIX.1-2003 (Technical
          Corrigendum 1) workaround; see the Rationale for the    
          POSIX specification of dlsym(). */

       *(void **) (&cosine) = dlsym(handle, "cos");
Run Code Online (Sandbox Code Playgroud)

我查看了相关的spec页面,但仍然无法理解不允许从void指针转换为函数指针的原因.虚假指针应该足够大,以容纳所有类型的指针.如果是这样,为什么不定义这个铸件呢?

c function-pointers void-pointers

11
推荐指数
0
解决办法
1655
查看次数

11
推荐指数
2
解决办法
5981
查看次数

核心数据和保留周期

我有一个核心数据类Game,它与另一个类Player有很多关系.这就是他们的标题

@property (nonatomic, retain) NSSet * players; // In Game.h
@property (nonatomic, retain) Game * game; // In Player.h (the inverse relationship)
Run Code Online (Sandbox Code Playgroud)

当我向Game类发布最后一个外部引用时,不会调用didTurnIntoFault.现在,我的问题是,这可能是由于上面创建的循环引用(正如您所看到的,两个属性都是'保留'),或者核心数据是否管理了所有这些并且问题出现在我的代码中.

core-data

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

Jquery:$ .when根据参数的数量表现不同

$ .when的行为会有所不同,具体取决于是否将一个或多个Deferred对象传递给它.这种行为记录在文档中 - 但问题是它迫使我编写两个不同的代码路径.

function foo (dfds) {
    $.when.apply(this, dfds).done(function() {
        console.log(arguments);
    });
}
Run Code Online (Sandbox Code Playgroud)

案例I:

foo([$.getJSON("http://freegeoip.net/json/8.8.8.8"),
     $.getJSON("http://freegeoip.net/json/8.8.8.9")]);
....
/* Output (what I'd come to expect) */
[Array[3], Array[3]]
Run Code Online (Sandbox Code Playgroud)

案例二:

foo([$.getJSON("http://freegeoip.net/json/8.8.8.8")]);
....
/* Output (the original unwrapped deferred's arguments) */
[Object, "success", Object]
Run Code Online (Sandbox Code Playgroud)

任何方式优雅地处理这个,而无需检查长度dfd或类型arguments

javascript jquery jquery-deferred

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

是不是oauth_signature重新发明了SSL轮?

在使用twitter API时,我遇到的oauth_signature基本上是(请求体+请求参数+ nonces/timestamps + a consumer_secret)的哈希值.该consumer_secret已知仅到正在发送的请求的应用程序.

在Twitter的案例中:

  • 所有通信必须通过SSL进行.
  • twitter consumer_secret向每个授权的应用程序发出.

由于主要用于oauth_signature防止MITM(即没有山雀(在传输中篡改):),在我看来,这个特定的用例可以通过相互SSL解决

  • Twitter而不是发布consumer_secret,可以为每个应用程序颁发SSL证书.

虽然客户端ssl证书的这种想法可能看起来像20世纪90年代的互联网奥秘,但它并不成功,主要是因为验证客户端证书的信任链存在问题.这个问题不会出现在这里,因为twitter将是证书的唯一发行者和验证者.缺点是更多地涉及代表Twitter生成初始应用程序/客户端ssl证书的努力,但回报将是REST API的简单性,这可以依赖于客户端是他所说的人的保证.

请注意,在这种情况下,twitter只是一个例子.AFAIK,大多数其他oauth实现者使用类似的策略,这里的要点适用于已经强制要求SSL的任何大型OAuth实现者.

我在这里错过了什么?互联网惯性?

ssl restful-authentication oauth client-certificates twitter-oauth

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

快速取消全球化

我的Swift全局变量没有被去初始化.

class Person {
  let name: String
  init(name: String) {
    self.name = name
    println("\(name) is being initialized")
  }
  deinit {
    println("\(name) is being deinitialized")
  }
}

func local() {
  let person = Person(name: "Local")
}

local()

var personp: Person? = Person(name: "Optional Global")
personp = nil

var person = Person(name: "Global")
Run Code Online (Sandbox Code Playgroud)

我使用Xcode6-Beta3 在一个独立的二进制文件中运行它(因为显然游乐场有deinit存在问题)并且禁用了优化:

> xcrun swift -O0 arc.swift && ./arc
Local is being initialized
Local is being deinitialized
Optional Global is being initialized
Optional Global is being deinitialized …
Run Code Online (Sandbox Code Playgroud)

ios swift

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

如何编号我的自定义errnos

如果我的程序异常终止(通过exit()),我会返回错误代码.对于标准情况,我只返回底层的errno(例如,ENOMEM用于失败的mallocs等).但是,由于我自己的原因没有定义系统错误,我也必须终止.

我应该返回什么错误值,以便它们不会与现有错误值发生冲突.或者我在做整个事情的屁股?

编辑:如果我不清楚这个问题,我很抱歉.我不是在谈论枚举等(它们是定义错误代码的机制).我在谈论他们可以采取的价值范围,而不与标准的价值观冲突.

我不知道的是该程序只能返回8位状态.所以看起来@r是正确的 - 这有点太小了,甚至不能容纳所有标准的,更不用说我的自定义错误了.所以1/0它是:)

c errno

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