【问题标题】:I need these three stock options to be class level variables, so they are only declared and initialised once我需要这三个股票期权是类级别的变量,所以它们只被声明和初始化一次
【发布时间】:2013-08-28 10:29:58
【问题描述】:

我只需要声明和初始化以下三个股票期权。我有一些伪代码来实现它,但我不确定如何让它工作。

这是在 iOS 应用程序的 .m 文件中声明的,.h 文件中没有任何内容。

伪代码如下:

// _msftStockPrice _googStockPrice _applStockPrice need to be class level
if(_msftStrockPrice == nil)
googStockPrice = [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolMSFT]

if(_appleStrockPrice == nil)
_msftStockPrice = [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolMSFT]


if(_msftStrockPrice == nil)
msftStockPrice = [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolMSFT]

if ([plot.identifier isEqual:CPDTickerSymbolAAPL] == YES) {
   return [_appleStockPrice objectAtIndex:index];
} else if ([plot.identifier isEqual:CPDTickerSymbolGOOG] == YES) {
   return [[_googStockPrice objectAtIndex:index];
} else if ([plot.identifier isEqual:CPDTickerSymbolMSFT] == YES) {
   return [_msftStockPrice objectAtIndex:index];
}

【问题讨论】:

  • 把它放到initviewDidLoad 方法有什么问题呢?
  • dispatch_once_t much ?
  • 你能告诉我如何实现它吗?
  • 注意appleStrockPrice 附近的拼写错误,您在其中指定了_msftStockPrice,并且您使用了三次CPTDickerSymbolMSFT。请注意。
  • 谢谢rob,会整理出来的!

标签: objective-c initialization declaration


【解决方案1】:

不要将变量声明为属性或实例变量,而是声明为静态变量。要么在 .m 文件的顶部范围内,要么如果上面的方法是访问这些变量的唯一位置,就在该方法内。像这样:

static NSArray *anArray=nil;

静态变量将对类的所有实例可见。显然,根据您的设计(线程),您需要防范由并发访问引起的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2015-09-17
    • 2016-04-29
    • 1970-01-01
    • 2021-10-28
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多