相关疑难解决方法(0)

Swift 3.1弃用了initialize().我怎样才能实现同样的目标?

Objective-C声明了一个类函数initialize(),在使用之前对每个类运行一次.它经常被用作交换方法实现(混合)等的入口点.

Swift 3.1弃用了这个函数并带有警告:

方法'initialize()'定义了Objective-C类方法'initialize',它不能保证被Swift调用,并且在将来的版本中将被禁止

如何解决这个问题,同时仍保持我目前使用initialize()入口点实现的相同行为和功能?

objective-c ios swift

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

+ initialize被调用不止一次

我有一个+initialize被多次调用的方法,我不明白为什么.

根据文档,它将为每个类(以及子类)调用一次,

这是我正在使用的代码:

@interface MyClass : NSObject

@end

static NSArray *myStaticArray;

@implementation MyClass

+ (void)initialize
{
  myStaticArray = [NSArray array];
}

@end
Run Code Online (Sandbox Code Playgroud)

(显然还有其他代码,但这是相关部分).

没有子类MyClass.它没有任何花哨的东西.当我的应用程序启动时,+ initialize被调用一次(NSApplication的委托告诉它用磁盘中的数据填充myStaticArray).然后第二次调用+ initialize,这是用户第一次选择与此类相关的菜单项.

我只是添加dispatch_once()了我的initialize代码,这显然解决了我的问题.但我不明白发生了什么事?当没有子类时,为什么会多次调用它?

这是第一次调用初始化时的堆栈跟踪:

+[MyClass initialize]
_class_initialize
objc_msgSend
-[MyAppDelegate applicationDidBecomeActive:]
_CFXNotificationPost
NSApplicationMain
main
start
Run Code Online (Sandbox Code Playgroud)

这是第二个电话:

+[MyClass initialize]
_class_initialize
NSApplicationMain
main
start
Run Code Online (Sandbox Code Playgroud)

如您所见,我的代码似乎没有触发第二次调用+ initialize(堆栈跟踪中没有任何内容).它我显示一个窗口立即出现,+initialize该窗口显示清除的静态数组的内容(窗口显示数组内容,但在此之后数组为空).

cocoa objective-c

10
推荐指数
1
解决办法
2862
查看次数

Swift中的静态块

在Java中,当该类被调用时,我使用静态块来执行一些代码,如本示例所示”

Class Name
 {
     static
     {
         for(int i = 0; i<10; i++)
         {

         }
     } 
 }
Run Code Online (Sandbox Code Playgroud)

如何在Swift中翻译该代码?

static swift

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

标签 统计

objective-c ×2

swift ×2

cocoa ×1

ios ×1

static ×1