objc static 关键字

不能再@interface 或者@protocol 内部声明变量

各大教程中总会告诉我们objc的static 方法跟c语言是一样的,今天单独对static进行了一次探究实验,代码如下:

实验

# STest.h
static NSUInteger count;
@interface STest : NSObject
-(NSUInteger) callCount;
@end

# STest.m
-(NSUInteger) callCount{
    return count++;
}

STest.mSplashController.m同时引入 STest.h
#SplashController.m 
	NSLog(@"%ld",[[STest alloc] callCount]);// 0
	NSLog(@"%ld", [so callCount]);	//1
	NSLog(@"%ld",[[STest alloc] callCount]);//2
 	NSLog(@"%ld", [so callCount]);	//3
 	NSLog(@"%ld", count);	//0

现状
由于在SplashController.m中#importSTest.h,隐藏是存在一个count静态变量的,但是我们调用的是否会发现输出过程中与STest 不同。

分析
static 的作用域是源代码级别(.m,.c)文件,在源代码中仅存在一个,并且不能别extern。
我们通过#import 引入 .h文件,相当于在两个源文件中个声明了一个 count变量,隐藏会出现如上情况。

IOS 知识点

1、对view的设置一定要等到view 的frame确认之后

Controller的声明周期中 - (void)viewDidLoad 时view 还未被设置,此时self.view的frame.size还是(0,0)

3 后记

瘦的人吃两口就饱了,胖的人饱了还能再吃两口。