小编Bob*_*ell的帖子

Apple的样本MVCN网络中的Singleton类NetworkManager是否正确?

以下是示例代码的链接http://developer.apple.com/library/ios/#samplecode/MVCNetworking/Introduction/Intro.html

以下是NetworkManager.m文件中的代码段

+ (NetworkManager *)sharedManager
// See comment in header.
{
    static NetworkManager * sNetworkManager;

    // This can be called on any thread, so we synchronise.  We only do this in 
    // the sNetworkManager case because, once sNetworkManager goes non-nil, it can 
    // never go nil again.

    if (sNetworkManager == nil) {
        @synchronized (self) {
            sNetworkManager = [[NetworkManager alloc] init];
            assert(sNetworkManager != nil);
        }
    }
    return sNetworkManager;
}
Run Code Online (Sandbox Code Playgroud)

显然这里存在线程安全问题.当存在多个线程时,可以创建两个NetworkManager实例.所以Apple犯了一个错误,对吗?

objective-c ios

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

在iOS/OSX上处理HTTP标头字段名称

我们知道HTTP头名称不区分大小写,在RFC2616中指定.

但是我发现所有流行的iOS/OSX框架,如ASIHTTRequest,AFNetworking,RestKit都使用以下代码测试是否存在头字段.

[[self responseHeaders] objectForKey:@"Keep-Alive"];
[[self responseHeaders] objectForKey:@"Content-Length"];
Run Code Online (Sandbox Code Playgroud)

responseHeaders只是一个NSDictionary.我原本以为CFNetwork层会处理这个问题,但没有发现任何线索.也许这是现实世界的惯例?

macos asihttprequest ios restkit afnetworking

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

为什么在gcc"start"函数中有无意义的asm代码(在main之前)?

我对运行时间有什么兴趣,所以我写了一个简单的c程序,如下所示.(我不粘贴some_function的代码.我认为这并不重要.)

int main(int argc, char *argv[]) {
    some_fucntion();
    return;
}
Run Code Online (Sandbox Code Playgroud)

我在我的Mac(10.6.8,Intel Core)上使用i686-apple-darwin10-llvm-gcc-4.2并使用以下命令编译源代码.实际上我已经尝试使用O3并获得相同的结果.

gcc -O0 -o test test.c
Run Code Online (Sandbox Code Playgroud)

然后我输入以下命令并获取那些asm代码.

otool -tV test
Run Code Online (Sandbox Code Playgroud)

我得到以下asm代码.我猜这些代码与准备main函数的参数有关.但我仍然无法弄清楚为什么有一个循环将eax设置为0x00?为什么有"jmp"指令?所以下一条指令永远不会被执行,对吧?

如果有人能在这里解释整个asm代码,我将非常感激.谢谢.

start:
0000000100000d20        pushq   $0x00
0000000100000d22        movq    %rsp,%rbp
0000000100000d25        andq    $0xf0,%rsp
0000000100000d29        movq    0x08(%rbp),%rdi
0000000100000d2d        leaq    0x10(%rbp),%rsi
0000000100000d31        movl    %edi,%edx
0000000100000d33        addl    $0x01,%edx
0000000100000d36        shll    $0x03,%edx
0000000100000d39        addq    %rsi,%rdx
0000000100000d3c        movq    %rdx,%rcx
0000000100000d3f        jmp     0x100000d45
0000000100000d41        addq    $0x08,%rcx
0000000100000d45        cmpq    $0x00,(%rcx)
0000000100000d49        jne     0x100000d41
0000000100000d4b        addq    $0x08,%rcx
0000000100000d4f        callq   _main
0000000100000d54        movl    %eax,%edi
0000000100000d56        callq   0x100000e7c     ; symbol …
Run Code Online (Sandbox Code Playgroud)

assembly gcc llvm

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

标签 统计

ios ×2

afnetworking ×1

asihttprequest ×1

assembly ×1

gcc ×1

llvm ×1

macos ×1

objective-c ×1

restkit ×1