gpt4 book ai didi

objective-c - 自学XCode/Objective-C : 'static' doesn't seem to mean what I *think* it means

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:57 25 4
gpt4 key购买 nike

我正在研究 Holzner 所著的“Visual Quick Start, Objective-C”一书中的示例。我在每个示例上都花了大量时间,调试代码是较快的部分,然后逐步对自己说为什么每一行代码都有效,每行中的每个词做了什么,并决定为什么作者使用一种方法事物与另一个。然后我用我自己的一些故事重复这个例子。这似乎是从结构化程序员转变为类 oop 程序员的好方法。它适用于这些示例,因为他一次只做一个概念。 (我已经完成了另外 2 本书的部分工作,但这个想法在那些书中对我不起作用。一旦我对某些事情感到困惑,我就一直保持困惑。在更长、更复杂的示例中有太多变量。)

在当前示例(第 137 页)中,Holzner 使用了“静态”一词。我查看了本书中的示例来确定这个词的含义。我也看了 Bjarne Stroustrups 的 C++ Programming Language 一书中的描述(我明白 C++ 和 Objective-C 并不完全一样)

(Bjarne Stroustup 第 145 页)使用静态变量作为内存, 而不是“可能被其他函数访问和破坏”的全局变量

这就是我对“静态”的理解。我认为这意味着静态变量的值永远不会改变。我认为这意味着它就像一个常数值,一旦你将它设置为 1 或 5,它就无法在运行期间更改。

但在这段代码示例中,静态变量的值确实发生了变化。所以我真的不清楚“静态”是什么意思。

(请忽略我在评论中留下的“后续问题”。我不想更改我运行的任何内容,并冒着造成阅读错误的风险

谢谢你给我的任何线索。我希望我没有对这个问题说太多细节。

月桂树

.....

Program loaded.
run
[Switching to process 2769]
Running…
The class count is 1
The class count is 2

Debugger stopped.
Program exited with status value:0.

.....

//
// main.m
// Using Constructors with Inheritance
//Quick Start Objective C page 137
//

#include <stdio.h>

#include <Foundation/Foundation.h>

@interface TheClass : NSObject

// FOLLOWUP QUESTION - IN last version of contructors we did ivars like this
//{
// int number;
//}

// Here no curly braces. I THINK because here we are using 'static' and/or maybe cuz keyword?
// or because in original we had methods and here we are just using inheirted methods

// And static is more long-lasting retention 'wise than the other method
// * * *

// Reminder on use of 'static' (Bjarne Stroustup p 145)
// use a static variable as a memory,
// instead of a global variable that 'might be accessed and corrupted by other functions'

static int count;

// remember that the + is a 'class method' that I can execute
// using just the class name, no object required (p 84. Quick Start, Holzner)

// So defining a class method 'getCount'

+(int) getCount;


@end

@implementation TheClass

-(TheClass*) init
{
self = [super init];
count++;
return self;
}

+(int) getCount
{
return count;
}

@end


// but since 'count' is static, how can it change it's value? It doeeessss....


int main (void) {
TheClass *tc1 = [TheClass new] ;
printf("The class count is %i\n", [TheClass getCount]);

TheClass *tc2 = [TheClass new] ;
printf("The class count is %i\n", [TheClass getCount]);


return 0;
}

最佳答案

“static”与 C++“const”不是一回事。相反,它是一个声明,一个变量只被声明一次并且将保留(因此是静态的)在内存中。假设你有一个函数:

int getIndex()
{
static int index = 0;
++index;
return index;
}

在这种情况下,“static”告诉编译器将索引值保留在内存中。每次访问它时都会更改:1,2,3,...。

比较一下:

int getIndex()
{
int index = 0;
++index;
return index;
}

每次创建索引变量时都会返回相同的值:1,1,1,1,1,...。

关于objective-c - 自学XCode/Objective-C : 'static' doesn't seem to mean what I *think* it means,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com