小编Ale*_*ßen的帖子

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

init 抛出异常时是否调用了 deinit?

考虑以下示例类:

class SocketWrapper {
    let sock: Int32

    init() throws {
        try sock = SocketWrapper.createSocket()
    }

    deinit {
        close(sock)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果 createSocket() 抛出并且 init() 失败会发生什么?袜子将保持未初始化状态。当 init() 抛出时, deinit 是否仍然被调用(在部分未初始化的对象上)?

swift

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

状态恢复时,RootView控制器显示较短

我使用SDK提供的状态恢复.

我从故事板中加载了所有视图控制器.初始视图控制器以模态方式显示另一个视图控制器 两者都有恢复标识符.

恢复工作正常但是:当我在模态呈现的视图控制器中并按下主页(保存状态).然后重新打开应用程序并恢复状态,以下情况发生:

一瞬间,我看到初始视图控制器,然后屏幕变为我实际想要看到的模态控制器.

为什么会这样?缓存目录中的快照确实显示了正确的屏幕(来自显示的视图控制器).

您可以使用此项目重现该问题.在初始视图控制器的viewDidAppear方法中添加断点,在恢复状态时,您将在屏幕和视图层次结构中看到初始视图控制器的视图:

(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x155607f0; frame = (0 0; 320 480); autoresize = W+H; gestureRecognizers = <NSArray: 0x15560d20>; layer = <UIWindowLayer: 0x1555f4f0>>
   | <UIView: 0x15542ad0; frame = (0 0; 320 480); autoresize = RM+BM; layer = <CALayer: 0x15542a70>>
   |    | <UIButton: 0x155432d0; frame = (137 269; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x15543b30>>
   |    |    | <UIButtonLabel: 0x15663dd0; frame = (0 6; 46 18); …
Run Code Online (Sandbox Code Playgroud)

iphone ios state-restoration ios7

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

使用clang vs gcc进行Union Zero初始化

给出以下C代码:

union Test {
  struct {
    int f1;
    int f2;
  };

  struct {
    int f3;
    int f4;
    int f5;
  };
};

union Test test = {.f1 = 1, .f2 = 2};
Run Code Online (Sandbox Code Playgroud)

当我使用gcc 6.1.1编译它时f5将初始化为零.当我使用clang 3.8.0时,它不是.我试过-O0-O2两个没有任何区别的编译器.这是在Linux x64上.

这是正确的行为,我可以告诉clang在这种情况下表现得像gcc吗?原因是我尝试使用clang编译一些代码,在这种情况下假设零初始化.

更新

由于答案到目前为止引用了C11.标准中是否有任何更改会更改以后版本中的行为?

c gcc initialization clang unions

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

标签 统计

c ×1

clang ×1

gcc ×1

glsl ×1

initialization ×1

ios ×1

ios7 ×1

iphone ×1

opengl ×1

state-restoration ×1

swift ×1

unions ×1