美文网首页
iOS - C 中的存储类

iOS - C 中的存储类

作者: Mitchell | 来源:发表于2015-10-31 10:28 被阅读115次

文章引用

一、C 中的四种存储类:

  • auto
  • register
  • static
  • extern

二、 auto

  • auto 是默认存储类,通常不显示的使用。
  • 当运行到程序块的时候,auto 类型的变量能自动分配内存,并且在该程序块运行完成时释放。访问 auto 变量仅限于声明它们的 block,以及任何嵌套 block 内。

三、register

  • register 的行为就想 auto,但不同的是它们不是被分配到堆栈中,它们被鵆在一个寄存器中。
  • 寄存器能比内存提供更快的访问速度,但是由于内存管理的复杂性,把变量放在寄存器中并不能保证程序变得更快。事实上,很可能由于在寄存器上占用了不必要的控件而最终被放缓执行。使用 寄存器 世纪上只是一个给编译器存储变量的 建议 ,实现时可以选择是否遵从这一点。
  • 寄存器 在 Objective-C 不够普及其实挺好的:最好还是不要使用它,因为比起其他任何明显的方式上加快应用程序,它更容易引起让人更加头疼的结果。

三、 static

  • 方法或函数内部的一个 static 变量保留其调用之间的值。
  • 全局声明的一个 static 变量可以被任何函数或方法被调用,只要这些方法出现在跟 static 变量同一个文件中。这同样适用于 static 方法。
  • 实例:创建单例
  + (instancetype)sharedInstance {
  static id _sharedInstance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
      _sharedInstance = [[self alloc] init];
  });
  return _sharedInstance;
}

四、 extern

  • 当 static 使得一个特定的文件中的函数和变量全局可见,extern 则使它们对所有文件可见。
  • 一般来说,全局变量并不是一个好主意。由于没有如何及何时改变值的任何限制,常常导致无法调试的错误。在 Objective-C,对 extern 有两个常见和实际的用途。
  • 全局字符串常量
    任何时候,如果你的应用程序要在一个公共头文件申明一个非自然语言的字符串常量,都应该将其声明为外部字符串常量。尤其是在声明诸如 userInfo 字典,NSNotification 名称和 NSError 域的时候。
    该模式是在公共头文件里申明一个 extern 的 NSString * const,并在实现文件里定义该 NSString * const:
    • AppDelegate.h
extern NSString * const kAppErrorDomain;
- ***AppDelegate.m***
NSString * const kAppErrorDomain = @"com.example.yourapp.error";

字符串的值并没有特别的需要注意的事情,只要它是唯一的。使用字符串常量建立了严格的约束,用该常数变量来代替字符串的文本值本身。

  • 公共方法
    一些全局的 API(经常使用) :
//TransactionStateMachine.h
typedef NS_ENUM(NSUInteger, TransactionState) {
    TransactionOpened,
    TransactionPending,
    TransactionClosed,
};
extern NSString * NSStringFromTransactionState(TransactionState state);
//TransactionStateMachine.m
NSString * NSStringFromTransactionState(TransactionState state) {
  switch (state) {
    case TransactionOpened:
      return @"Opened";
    case TransactionPending:
      return @"Pending";
    case TransactionClosed:
      return @"Closed";
    default:
      return nil;
  }
}

相关文章

  • iOS - C 中的存储类

    文章引用 一、C 中的四种存储类: auto register static extern 二、 auto aut...

  • c基础-存储类

    c程序中可用的存储类: auto1.1 auto 存储类是所有局部变量默认的存储类。{ int mount; au...

  • iOS - SQLite数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库。例如前面IOS开发系列—...

  • iOS基础之数据存储

    iOS数据存储 1. 概论 在iOS开发中数据存储的方式可以归纳为两类: 存储文件 和 存储到数据库. 2.文件存...

  • iOS经典面试题分析

    面试题一 在iOS类的结构分析中的探索中,我们知道了实例方法 存储在类中,类方法存储在元类中,接下来我们来分析一下...

  • C语言基础教程之存储类

    编程中变量还有生命长短?C语言四种不同的存储类变量 存储类定义C程序中变量和/或函数的范围(可见性)和生命周期。它...

  • UIWebView实现自动登陆

    IOS中UIWebView不会自动存储、读取Cookie.要实现UIWebView的自动登陆,需要手动存储、读取C...

  • C存储类

    在C语言中,程序内变量或函数的作用域和寿命是由其存储类决定的。每个变量都有其生命周期,或存储其值的上下文。函数和变...

  • C语言

    C数据类型 C中的变量声明 C中的左值(Lvalues)和右值(Rvlues) C常量 定义常量 C存储类 杂项运...

  • C++ 存储类

    C++ 存储类 存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之...

网友评论

      本文标题:iOS - C 中的存储类

      本文链接:https://www.haomeiwen.com/subject/gfifhttx.html