天道酬勤,学无止境

全局变量问题(Global Variable problem)

问题

我在 global.h 文件中定义了一个全局变量标志,当我单击下一个标签栏时,我无法访问标志值。我想要一个所有标签的全局变量。请建议我。

回答1

如果你想要一个全局变量,这里有一些你可以尝试的选项:

1)在global.h中定义静态变量。 例如,您想要一个 NSString 全局变量,请在 global.h 中声明以下内容:

@interface global : NSObject {

}
+(NSString*)MY_STR;

@end

然后在 global.m 中将其实现为静态:

static NSString* MY_STR;

@implementation global

+(void) initialize
{

MY_STR = @"global string";      

}

+(NSString*)MY_STR{
    return MY_STR;
}

然后在任何需要此变量的类中,您可以导入 global.h 并按如下方式访问它:

[global MY_STR];

2) 在这种方法中,定义一个单例类并使用其属性。 您可以将全局创建为单例类。 在 global.h 中声明一个静态 getInstance 方法:

@interface global : NSObject{
  NSString *MY_STR;
}
@property(nonatomic, retain) NSString *MY_STR;
+(global*)getInstance;
@end

在 global.m 中,声明一个静态 sharedInstance:

@implementation global

@synthesize MY_STR;

static global *g;

+(global*)getInstance{
    @synchronized([global class]){
        if(g == nil){
            g = [[global alloc] init];
        }
    }
    return g;   
}

@end

在任何需要访问 MY_STR 的类中,导入 global.h 并编写以下内容:

global *g1= [global getInstance];
g1.MY_STR;

3)第三种方法是在应用程序委托中声明变量并访问它们。

回答2

对于(非客观的)c 方法:

在 global.h

extern int flag;

在 global.m

int flat;

在任何其他 .m 或 .c

#import "global.h"

flag = 123; // set
int abc = flag; // get
回答3

您是否将此文件包含在要使用此标志的位置?

回答4

对每个 Tab 的点击事件使用 Getter 和 Setter 方法。

-(void)setTitle:(NSString *)newTitle {

    if (instanceVar != newTitle) {
    [instanceVar release]; 
    instanceVar = [newTitle copy];
    // or retain, depending on object & usage
    }
 }


 -(NSString *)title {

       return [[instanceVar retain] autorelease];
     }

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • jQuery全局变量问题(jQuery global variable problem)
    问题 var id = $(this).children().html(); // id is 5 $.ajax({ url: 'ajax.php?id=' + id, success: function(data) { id = data; // id is 1 } }); if(id == 1){ // id is again 5 ... } 为什么在下面的例子中我不能重新初始化 id 变量? 怎么了? 谢谢。 回答1 $.ajax()函数必须去获取数据,它没有这样做,并在它到达代码之后立即执行您的成功回调。 您的代码顺序实际上是这样发生的: var id = $(this).children().html(); //Ajax start if(id == 1){ } //Ajax end (sometime later, not immediately after) function(data) { id = data; } 如果您依赖此值继续,请将其粘贴到成功回调中: var id = $(this).children().html(); // id is 5 $.ajax({ url: 'ajax.php?id=' + id, success: function(data) { id = data; // id is 1 if(id == 1){ // id is now
  • LISP - 重新初始化后全局变量保持其旧值(LISP - Global variable keep their old value after reinitialization)
    问题 我正在使用 Common Lisp 创建一个专家系统以供我学习。 有一个全局变量: BF -> fact base。 我这样初始化: (defvar *BF* NIL) 我的“主函数”调用函数“初始化”,该函数使用大数据设置全局变量。 (defun initialize () (setf *BF* '( (metric ( (CPU-utilization NIL) (RPI NIL) (ART NIL) (concurent-invocation NIL) (stall-count NIL) (GC-bytes-in-use NIL) (available-thread NIL) (available-connection NIL) (instance-count NIL) )) (problem ( (livelock T) (memory-leaks T) (code-inefficient T) (overload T) (under-allocation T) (internal-chokepoint T) (thread-leaks T) (blocking-deadlock T) (unending-retries T) (overuse-external-system T) (pig-in-a-python T) (too-many-layers T)
  • 在函数中使用全局变量(Using global variables in a function)
    问题 如何在函数中创建或使用全局变量? 如果在一个函数中创建全局变量,如何在另一个函数中使用该全局变量? 我是否需要将全局变量存储在需要对其进行访问的函数的局部变量中? 回答1 您可以通过声明为使用其他功能中的全局变量global ,一个值分配给它的每个函数中: globvar = 0 def set_globvar_to_one(): global globvar # Needed to modify global copy of globvar globvar = 1 def print_globvar(): print(globvar) # No need for global declaration to read value of globvar set_globvar_to_one() print_globvar() # Prints 1 我想这是因为全局变量是如此危险,Python希望通过显式要求使用global关键字来确保您真正知道这就是要使用的内容。 如果要跨模块共享全局变量,请参见其他答案。 回答2 如果我正确地理解了您的情况,那么您所看到的是Python处理本地(函数)和全局(模块)名称空间的结果。 假设您有一个像这样的模块: # sample.py myGlobal = 5 def func1(): myGlobal = 42 def func2()
  • 如果多次声明相同的变量,是否会有任何问题?(Will I have any problems if I declare the same variable multiple times?)
    问题 所以可以说我有一些代码: //Javascript var elements = []; function addNumbah1(){ var i = 1; elements.push(i); } function addNumbah2(){ var i = 2; elements.push(i); } 然后继续到addNumbah999(),每次声明i变量的形式都是不好的吗? 那会破坏任何东西吗? 我应该做: //Javascript var elements = []; var i function addNumbah1(){ i = 1; elements.push(i); } function addNumbah2(){ i = 2; elements.push(i); } 回答1 简短的回答:否,无论您声明了多少次,JS都将所有变量声明提升到作用域的顶部。 var i = 0 for (var i=0;i<10;i++) { var j = i%2;//declared 10 times, on each iteration } 将被翻译成 var i, j; //i is undefined at this point in the code. for (i = 0;i<10;i++) { j = i%2;//declared 10 times, on each
  • 我应该如何为 PHP 中的所有页面设置全局变量(How should I make variable global for all the pages in PHP)
    问题 问题 我想创建$associate_name和$app_key全局变量,以便我可以在我想要的任何页面上访问它们。 下面是我的头文件中的代码,get 变量将进入索引页面。 它在索引页上工作正常,因为 $_GET 数据可用,但是当用户移动到下一页但包含相同的头文件时,它会抛出一个错误,说Undefined index 。 请让我知道如何在所有页面上使用此变量。 谢谢! 代码 $associate_name = $_REQUEST['an']; $app_key = $_REQUEST['key']; define('associate_name',$associate_name); define('app_key',$app_key); //echo "Sorry but there seems to be a problem in your code. We can't find one of the following: App name or App key"; $select_associate = "SELECT * FROM associate_account WHERE associate_name='".associate_name."' and app_key='".app_key."'"; $assoc_result = mysql_query($select
  • 为什么未定义全局变量? [复制](Why a variable defined global is undefined? [duplicate])
    问题 这个问题已经在这里有了答案: “悬挂式” JavaScript变量(6个答案) 5年前关闭。 我这里有一个简单的函数和一个全局变量。 为什么undefined myname而不是字符串"global" ? var myname = "global"; // global variable function func() { alert(myname); // "undefined" var myname = "local"; alert(myname); // "local" } func(); 不可能引用在该函数范围之外定义的外部变量吗? 在这个全局变量中... 以及如何解决这个问题,使我不会从全局变量中得到undefined信息? 回答1 您刚刚偶然发现了称为提升的js“功能” var myname = "global"; // global variable function func() { alert(myname); // "undefined" var myname = "local"; alert(myname); // "local" } func(); 在此代码中,当您定义func ,编译器将查看函数体。 它看到您正在声明一个名为myname的变量。 升降机的Javascript变量和函数声明,该声明移动到函数的顶部。 由于提升,您的代码将重写为以下内容。
  • 在外部作用域中定义的阴影名称有什么问题?(What is the problem with shadowing names defined in outer scopes?)
    问题 我刚切换到PyCharm,对所有警告和提示它为我提供了改进我的代码感到非常高兴。 除了我不了解的那一项: 此检查将检测在外部作用域中定义的阴影名称。 我知道从外部作用域访问变量是一种不好的做法,但是隐藏外部作用域有什么问题呢? 这是一个示例,其中PyCharm给我警告消息: data = [4, 5, 6] def print_data(data): # <-- Warning: "Shadows 'data' from outer scope print data print_data(data) 回答1 上面的代码片段没有什么大不了的,但是请想象一个具有更多参数和更多代码行的函数。 然后,您决定将data参数重命名为yadda ,但是错过了函数主体中使用该参数的位置之一...现在, data引用了全局变量,并且开始出现怪异的行为-您将在其中出现一个更加明显的NameError如果您没有全局名称data 。 还要记住,在Python中,所有事物都是一个对象(包括模块,类和函数),因此没有用于函数,模块或类的独特命名空间。 另一种情况是,将函数foo导入模块的顶部,然后在函数主体中的某个位置使用它。 然后,在函数中添加一个新参数,并将其命名为-Bad Luck- foo 。 最后,内置函数和类型也存在于相同的名称空间中,并且可以以相同的方式进行阴影处理。 如果您的功能短
  • 声明不带var关键字的变量(Declaring variables without var keyword)
    问题 在w3schools中写道: 如果声明变量而不使用“ var”,则变量始终变为GLOBAL。 在函数内部声明全局变量是否有用? 我可以想象在某个事件处理程序中声明一些全局变量,但是这样做有什么用呢? 更好地使用RAM? 回答1 不,没有RAM好处或类似的好处。 w3schools谈论的是我所说的“内隐全球性恐怖”。 考虑以下功能: function foo() { var variable1, variable2; variable1 = 5; varaible2 = 6; return variable1 + variable2; } 看起来很简单,但是由于varaible2 = 6;上的错字,它返回NaN而不是11 varaible2 = 6; 线。 并使用输入错误的名称创建一个全局变量: function foo() { var variable1, variable2; variable1 = 5; varaible2 = 6; return variable1 + variable2; } console.log(foo()); // NaN console.log(varaible2); // 6?!?!?! 这是因为函数分配给varaible2 (请注意输入错误),但是varaible2并未在任何地方声明。 通过JavaScript中作用域链的机制
  • Node.js 全局变量属性被清除(Node.js global variable property is purged)
    问题 我的问题不是关于“内存泄漏”,而是关于 node.js (expressjs) 应用程序的“内存清除”。 我的应用程序应该在内存中维护一些对象,以便在服务期间进行快速查找。 暂时(一两天)启动应用程序后,一切似乎都很好,直到突然我的 Web 客户端无法查找对象,因为它已被清除(未定义)。 我怀疑 Javascript GC(垃圾收集)。 但是,正如您在 psedu 代码中所见,我将对象分配给 node.js“全局”变量属性,以防止 GC 清除它们。 请给我一些线索是什么导致了这个问题。 非常感谢您的善意建议~ 我的 node.js 环境是 node.js 0.6.12、expressjs 2.5.8 和 VMWare cloudfoundry 节点托管。 这是我的 app.js 伪代码: var express = require("express"); var app = module.exports = express.createServer(); // myMethods holds a set of methods to be used for handling raw data. var myMethods = require("myMethods"); // creates node.js global properties referencing
  • 从函数设置全局PowerShell变量,其中全局变量名称是传递给该函数的变量(Setting a global PowerShell variable from a function where the global variable name is a variable passed to the function)
    问题 我需要从函数设置全局变量,但不确定如何执行。 # Set variables $global:var1 $global:var2 $global:var3 function foo ($a, $b, $c) { # Add $a and $b and set the requested global variable to equal to it $c = $a + $b } 调用函数: foo 1 2 $global:var3 最终结果: $ global:var3设置为3 或者,如果我这样调用该函数: foo 1 2 $global:var2 最终结果: $ global:var2设置为3 我希望这个例子有意义。 传递给函数的第三个变量是要设置的变量的名称。 回答1 您可以使用Set-Variable cmdlet。 传递$global:var3发送$var3的值,这不是您想要的。 您要发送名称。 $global:var1 = $null function foo ($a, $b, $varName) { Set-Variable -Name $varName -Value ($a + $b) -Scope Global } foo 1 2 var1 但是,这不是很好的编程习惯。 下面将更加简单明了,并且以后不太可能引入错误: $global:var1 = $null
  • 全局变量没有全局作用域(Global variable does not have global scope)
    问题 supposedlyGlobalVariable := "blah" ARoutine() { localVariable := "asdf" MsgBox, The global variable value is %supposedlyGlobalVariable%. The local variable value is %localVariable%. } ^!X:: ;This assigns the hotkey CTRL + ALT + X to run the routine ARoutine() return 运行代码,结果为: "The global variable value is . The local variable value is asdf." 该文件指出: 变量作用域和声明:除了函数中的局部变量,所有变量都是全局的; 也就是说,它们的内容可以被脚本的任何部分读取或更改。 为什么我的全局变量在函数内没有作用域? 回答1 全局变量的文档可以在这里找到: https://autohotkey.com/docs/Functions.htm#Global 全局变量要在函数内引用现有的全局变量(或创建一个新的),请在使用之前将该变量声明为全局变量。 例如: LogToFile(TextToLog) { global LogFileName
  • 全局变量和全局对象的属性之间是否有任何区别(Is there any difference between a global variable and a property of the Global Object)
    问题 我正在阅读David Mark关于js框架“ Sencha”的以下分析:https://gist.github.com/3279190并且他在那儿声明... 他们想要的是一个全局变量,但最终得到的是Global Object的属性。 根据规范和(和实施历史),两者之间有足够的差异,因此需要注意不要混淆(如此处所述)。 ...但是据我所知, var my_global = 123;之间没有任何区别var my_global = 123; 和(在浏览器环境中) window.my_global = 123; (在该示例中,我假设环境是浏览器-因此使用window ,但是我可以只使用this.my_global因为显然,在不同环境中运行时,全局对象会有所不同)。 但是,忽略微小差异,将属性分配给全局对象与创建全局变量之间有区别吗? 我认为没有,创建全局变量只是将属性分配给全局对象的另一种方法。 我认为,如果某些浏览器的id为“ my_global”的元素可能会出现问题,那么显然这可能会导致JavaScript引用正确的内容出现问题,但我不确定导致该问题的方式/原因(例如,为全局对象分配属性会导致元素ID问题发生,还是声明一个导致元素ID问题的全局变量?) 有人可以帮我澄清一下吗? 回答1 2020年4月更新 正如D.Pardal的评论所指出的那样,以下第一句话写于2012年
  • 在不使用“全局”的情况下访问函数外部的函数变量(Access a function variable outside the function without using “global”)
    问题 我正在尝试在Python函数外部访问局部函数变量。 因此,例如 bye = '' def hi(): global bye something something bye = 5 sigh = 10 hi() print bye 上面的工作正常。 由于我想找出是否可以在hi()外部访问bye而不使用global bye ,因此我尝试了: def hi(): something something bye = 5 sigh = 10 return hi() x = hi() print x.bye 上面给出了AttributeError: 'NoneType' object has no attribute 'bye' 。 然后,我尝试: def hi(): something something bye = 5 sigh = 10 return bye hi() x = hi() print x.bye 这次甚至都不会出错。 因此,是否有一种方法可以在其函数( hi() )之外访问局部函数变量( bye ),而无需使用全局变量,也无需打印出变量sigh ? (对问题进行了编辑,在@hcwhsa的评论后加上sigh 。 回答1 您可以按照以下方式进行操作(在我测试它们时,它们在Python v2.7.17和v3.8.1中均有效): def hi(): # other code
  • 全局变量sencha touch 2.1(Global variable sencha touch 2.1)
    问题 嗨,我需要定义一个全局变量以在我的应用程序的任何地方使用。 我在app.js声明一个全局变量的baseUrl。 请参阅下面的 app.js //<debug> Ext.Loader.setPath({ 'Ext': 'touch/src',//Location of the sencha touch source files 'bluebutton': 'app', }); //</debug> Ext.application({ name: 'bluebutton',//Application Path, all classes in you app. For eg blueButton.view.Main.case sensitive views: ['Main', 'BlueButton.CouponMain', 'BlueButton.CouponList', 'BlueButton.CouponList2', 'BlueButton.CouponList3', 'BlueButton.TransactionMain', ], stores : [ 'BlueButton.GlobalVariable', ], models : ['BlueButton.GlobalVariable', 'BlueButton.MemberDetail', ]
  • 全局变量默认是extern还是等于在global中用extern声明变量?(Are global variables extern by default or is it equivalent to declaring variable with extern in global?)
    问题 我经历了以下两个问题: C和C ++中的static和extern全局变量 C中的全局变量是否是静态的? 这两个问题都以不同的方式说明了这两件事。 问题1的答案: 默认情况下,在C和C ++上,全局变量既不是extern也不是static。 问题2的答案: 如果未指定存储类(即extern或static关键字),则默认情况下全局变量具有外部链接 我需要了解以下内容: 链接中的全局变量是否默认为extern (或)是否等效于通过指定extern存储类来声明变量? 是全局变量static默认范围(或)是等同于通过指定变量声明static存储类? C或C++有什么区别吗? 任何人都可以澄清一下吗? 回答1 链接中全局变量默认是extern的(或)是否等效于通过指定extern存储类来声明变量? 在最外层,在任何块外声明的变量的默认存储期限,范围和链接具有static存储期限,文件范围和external链接。 C11标准指出: 6.2.1标识符范围(p4): [...]如果声明标识符的声明符或类型说明符出现在任何参数块或参数列表之外,则标识符具有文件作用域,该作用域终止于翻译单元的末尾。 [...] 6.2.2标识符的链接(p5): [...]如果对象的标识符声明具有文件范围并且没有存储类说明符,则其链接为external 。 6.2.4对象的存储期限(p3):
  • 如何在SQL Server中声明全局变量。(how to declare global variable in SQL Server..?)
    问题 我想对来自不同数据库的不同查询使用相同的值 喜欢 DECLARE @GLOBAL_VAR_1 INT = Value_1 DECLARE @GLOBAL_VAR_2 INT = Value_2 USE "DB_1" GO SELECT * FROM "TABLE" WHERE "COL_!" = @GLOBAL_VAR_1 AND "COL_2" = @GLOBAL_VAR_2 USE "DB_2" GO SELECT * FROM "TABLE" WHERE "COL_!" = @GLOBAL_VAR_2 但它给人错误。 必须声明标量变量“ @ GLOBAL_VAR_2”。 有人可以提出任何建议的方式吗? 回答1 在Transact-SQL中无法声明全局变量。 但是,如果要在一个脚本的多个批次之间访问所有想要的变量,则可以使用SQLCMD工具或SSMS的SQLCMD模式,并定义该特定于工具/模式的变量,如下所示: :setvar myvar 10 然后像这样使用它们: $(myvar) 要使用SSMS的SQLCMD模式,请执行以下操作: 回答2 您不能在SQLServer中声明全局变量。 如果使用的是Management Studio,则可以使用SQLCMD模式,如@Lanorkin指出的那样。 否则,您可以使用CONTEXT_INFO来存储在会话和连接过程中可见的单个变量
  • 使用 AppDelegate 的变量作为全局变量 - 关于发布/保留的问题(Using Variable of AppDelegate as a Global Variable - question regarding release/retain)
    问题 我在 AppDelegate 中创建了一个名为“myDBManager”的变量: @interface myAppDelegate : NSObject <UIApplicationDelegate> { MyDBManager *myDBManager; } @property (nonatomic, retain) MyDBManager *myDBManager; @end 我在大多数其他类中将其用作保存所有关键应用程序数据的全局变量。 它只会创建一次,并且只会在最后死亡。 例如,在 AnyOtherClass 中访问 myDBManager @interface AnyOtherClass : UITableViewController { MyDBManager *myDBManager; NSObject *otherVar; } @property (nonatomic,retain) MyDBManager *myDBManager; @property (nonatomic,retain) NSObject *otherVar; @end //getting the data from "global" myDBManager and putting it into local var of AnyOtherClass - (void
  • How to declare a global variable in php?(How to declare a global variable in php?)
    问题 我有这样的代码: <? $a="localhost"; function body(){ global $a; echo $a; } function head(){ global $a; echo $a; } function footer(){ global $a; echo $a; } ?> 有什么方法可以在一处定义全局变量并使变量$a可在所有函数中访问? 不使用global $a; 更多的? 回答1 可以使用$ GLOBALS数组代替: $GLOBALS['a'] = 'localhost'; function body(){ echo $GLOBALS['a']; } 从手册中: 包含对所有变量的引用的关联数组,这些变量当前在脚本的全局范围内定义。 变量名是数组的键。 如果您有一组需要一些公共变量的函数,那么带有属性的类可能是一个不错的选择,而不是全局的: class MyTest { protected $a; public function __construct($a) { $this->a = $a; } public function head() { echo $this->a; } public function footer() { echo $this->a; } } $a = 'localhost'; $obj = new MyTest($a)
  • 如何在C++中引用与局部变量同名的全局变量?(How to refer to a global variable which has the same name as a local variable in C++?)
    问题 如果有一个全局变量并且函数有一个同名的参数,并且想要的结果是局部变量和全局变量的总和,那么在这种特殊情况下我们如何引用全局函数? 我知道这样做不是个好主意。 但只是出于好奇而询问。 int foo = 100; int bar(int foo) { int sum=foo+foo; // sum adds local variable and a global variable return sum; } int main() { int result = bar(12); return 0; } 回答1 到目前为止最好的选择是重命名函数参数,这样它就不会与全局变量发生冲突,因此不需要规避。 假设 rename 选项不可接受,请使用::foo foo在全局范围内引用foo : #include <iostream> int foo = 100; int bar(int foo) { int sum = foo + ::foo; // sum adds local variable and a global variable return sum; } int main() { int result = bar(12); cout << result << "\n"; return 0; } 本地名称和全局名称之间的冲突是不好的——它们会导致混淆——因此值得避免它们。 您可以将
  • 为什么我不能在Python中设置全局变量?(Why can't I set a global variable in Python?)
    问题 全局变量在Python中如何工作? 我知道全局变量是有害的,我只是在做实验。 这在python中不起作用: G = None def foo(): if G is None: G = 1 foo() 我收到一个错误: UnboundLocalError: local variable 'G' referenced before assignment 我究竟做错了什么? 回答1 您需要全局语句: def foo(): global G if G is None: G = 1 在Python中,您分配的变量默认情况下成为局部变量。 您需要使用global将它们声明为全局变量。 另一方面,您引用但未分配的变量不会自动成为局部变量。 这些变量指的是封闭范围内最接近的变量。 Python 3.x引入了类似于global的nonlocal语句,但是将变量绑定到其最接近的范围。 例如: def foo(): x = 5 def bar(): nonlocal x x = x * 2 bar() return x 调用时此函数返回10。 回答2 您仍然必须从该函数中将G声明为全局变量: G = None def foo(): global G if G is None: G = 1 foo() print G 只是输出 1 回答3 您需要将G声明为global ,但是原因如下