标签: static-variables

ARC:如何发布静态变量?

Will dealloc(下面)释放NSString静态变量指向的exampleString

// ExampleClass.h

@interface ExampleClass : NSObject

@end

// ExampleClass.m

static NSString *exampleString;

@implementation ExampleClass

- (void)dealloc {
    exampleString = nil;
}

- (id)init {
    self = [super init];
    if (self) {
        exampleString = [NSString stringWithFormat:@"example %@", @"format"];
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

objective-c static-variables automatic-ref-counting

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

单例和公共静态变量Java

我有2个选择:

  1. 单身模式

    class Singleton{
        private static Singleton singleton = null;
    
        public static synchronized Singleton getInstance(){
            if(singleton  == null){
                singleton = new Singleton();
            }
            return singleton;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用一个static final字段

    private static final Singleton singleton = new Singleton();
    
    public static Singleton getSingleton() {
        return singleton;
    }
    
    Run Code Online (Sandbox Code Playgroud)

有什么不同?(单线程或多线程)

更新:我知道Bill Pugh或enum方法.我不是在寻找正确的方法,但我只使用过1.在1或2中是否有任何差异?

java singleton static-variables

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

初始化Objective-C类别中的静态变量

我试图创建一个静态变量来存储图像字典.不幸的是,我可以找到初始化它的最好方法是检入使用该变量的每个函数.由于我在一个类别中创建了这个变量,我不能只在初始化器中初始化它.有没有更简洁的初始化navigationBarImages的方法?

static NSMutableDictionary *navigationBarImages = NULL;

@implementation UINavigationBar(CustomImage)
//Overrider to draw a custom image
- (void)drawRect:(CGRect)rect
{
    if(navigationBarImages==NULL){
        navigationBarImages=[[NSMutableDictionary alloc] init];
    }
    NSString *imageName=[navigationBarImages objectForKey:self];
    if (imageName==nil) {
        imageName=@"header_bg.png";
    }
    UIImage *image = [UIImage imageNamed: imageName];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

//Allow the setting of an image for the navigation bar
- (void)setImage:(UIImage*)image
{
    if(navigationBarImages==NULL){
        navigationBarImages=[[NSMutableDictionary alloc] init];
    }
    [navigationBarImages setObject:image forKey:self];
}
@end
Run Code Online (Sandbox Code Playgroud)

initialization objective-c static-variables categories

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

Objective C - 静态和全局变量?

在我的.m文件中,我有一个名为Ad的类,我有3个静态字符串

static NSString *AdStateDisabled = @"disable";
static NSString *AdStateExpired = @"expired";
static NSString *AdStateActive = @"active";
Run Code Online (Sandbox Code Playgroud)

我可以简单地在当前类中使用这些静态变量,但我不能从任何其他类调用它们,有没有办法使这些静态变量全局化?所以例如在我的viewcontroller类中我可以做类似的事情.

//HomeViewController.m
if ([self.ad.state isEqual:Ad.AdStateDisabled])
{
     //do something
}
Run Code Online (Sandbox Code Playgroud)

iphone global-variables objective-c static-variables

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

静态变量生存期和应用程序池重新计划

我理解与应用程序(控制台/窗口)相关的静态变量的生命周期,但我不确定我是否在Web应用程序(asp.net,mvc,web api等)的上下文中理解它们的生命周期.

根据我的理解,当IIS回收应用程序池时,静态变量会重置为其类型的默认值(积分= 0,引用类型= null等),但我想知道内联初始化程序是否在回收后重新初始化,或者是类型默认值总是可以分配?

例子):

// example 1
static class StaticRandom
{
    private static Random rng = new Random();
}
Run Code Online (Sandbox Code Playgroud)

在上面,当循环后第一次调用时,是否会将静态字段rng重新初始化为新的Random()?或者在尝试使用变量之前是否需要实现空检查,例如:

// example 2
static class StaticRandom
{
    private static Random rng = null;

    public static Next()
    {
        if (rng == null)
            rng = new Random();
        return rng.Next();
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否正确假设在IIS回收后,示例1中的rng变量将为null,直到重新初始化为例如示例2?

注意:我完全了解上面示例中的线程安全问题,这只是一个简单的例子来说明我的问题.在上述想法的真实场景中,我将实现适当的锁定模式.

.net c# asp.net iis static-variables

9
推荐指数
1
解决办法
5178
查看次数

单个TU中内联变量的静态初始化顺序

我知道这个问题已经被问过很多次了,但这似乎是一个略有不同的变化,我无法弄清楚。

考虑以下代码:

#include <cstdio>

struct TestValue;

inline const TestValue* v_ptr = nullptr;

struct TestValue {
    static const TestValue v1;

    TestValue() {
        v_ptr = this;
        printf("TestValue Initialized at %p\n", this);
    }
};

struct CallTest {
    CallTest() {
        printf("CallTest Initalized at %p\n", this);
        printf("v_ptr = %p\n", v_ptr);
    }
};

const inline TestValue TestValue::v1{};
const inline CallTest ct{};



int main() {}
Run Code Online (Sandbox Code Playgroud)

我使用的是 C++17 或更高版本,它增加了对外部静态初始化内联变量的支持。我试图理解使用内联说明符“out of line”时围绕初始化顺序的保证。请注意, v1被声明为 TestValue 的静态变量,然后稍后但在 之前内联定义ct。令人惊讶的是(至少对我来说),使用 Clang 14.0.3,程序打印:

CallTest Initalized at 0x404059
v_ptr = (nil)
TestValue …
Run Code Online (Sandbox Code Playgroud)

c++ inline static-variables initialization-order inline-variable

9
推荐指数
1
解决办法
420
查看次数

BroadcastReceiver生命周期 - 静态变量

我有一个BroadcastReceiver类.我声明了一些静态变量,其值在onReceive()方法中更新.根据我的知识,静态变量将保持它在onReceive调用中的值.有没有可能我会松开这些值(就像我的类将被卸载重置静态变量)?这些基本上是我需要为多个onReceive调用提供的一些临时变量.

android garbage-collection static-variables broadcastreceiver

8
推荐指数
1
解决办法
3592
查看次数

如何在PHP中更改静态变量值?

这是我想要完成的简化版本:

在我的脚本中,我希望每次执行脚本时都会更改true和false的变量.

<?php
    static $bool = true;

    // Print differente messages depending on $bool
    if( $bool == true )
        echo "It's true!";
    else
        echo "It's false!";

    // Change $bools value
    if( $bool == true )
        $bool = false
    else
        $bool = true;
?>
Run Code Online (Sandbox Code Playgroud)

但显然我正在做的事情是错的.变量$bool是不断的true,我还没有完全掌握我认为的静态变量的概念.我究竟做错了什么?

php static-variables

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

我可以在C中释放()静态和自动变量吗?

代码如下:

#include <stdlib.h>

int num = 3;   // Static external variable
int *ptr = &num;

int main(void)
{
 int num2 = 4;  // Automatic variable
 int *ptr2 = &num2;

 free(ptr);  //Free static variable
 free(ptr2); //Free automatic variable

 return 0; 
}
Run Code Online (Sandbox Code Playgroud)

我尝试编译上面的代码,它的工作原理,我很好奇free()功能是否能够释放静态变量和自动变量?或者基本上什么也没做?

c free scope static-variables dynamic-allocation

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

Javascript 局部静态变量

不确定我是否完全理解我在这里找到的类似问题的答案,所以要绝对确定:

我想在函数中有一个局部变量,只初始化一次(类似于 C、C++ 等强类型语言中的静态变量)。

当然,我可以全局声明它,但将它放在该函数的范围内似乎更好,因为它不会在其他任何地方使用。

现在,这就是我要做的:

function func(data) {
    func.PARAMS = [
        {"name": "from", "size": 160, "indexed": true},
        {"name": "input", "size": 256, "indexed": false},
        {"name": "output", "size": 256, "indexed": false},
    ];
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,func.PARAMS确实只会初始化一次,还是每次调用函数时都会初始化?

根据我找到的一些答案(例如这个答案),我需要在初始化之前使用以下内容:

if (typeof func.PARAMS == 'undefined')
Run Code Online (Sandbox Code Playgroud)

当然,这种“补充”在强类型语言中是无关紧要的,所以我只想确保它是绝对必要的,以确保“静态行为”(即,一次性初始化)。

javascript static static-variables

8
推荐指数
1
解决办法
8501
查看次数