ForgetSou | Blog

❤ 武统台湾 刻不容缓 ❤

0%

一.define和const常量的区别

define 是定义宏的指令,程序在预处理阶段进行替换,在程序运行时并没有用 define 定义的宏,系统不会为其分配内存并在编译时也不会进行数据类型检查,大量使用宏会导致二进制文件变大。

const 定义的常量是在程序运行时存放在常量表中,系统为其分配内存并在编译时进行数据类型检查。

define 不能调试,const可以调试;

define 可以定义简单函数,const只能定义常量

// 宏
#define HSCoder @"你好“
// 变量
NSString *coder = @"你好";
// 全局变量
extern NSString *coder;
// 全局常量
extern NSString *const coder;
// 全局指针变量
extern const NSString *coder;
extern NSString const *coder;
// 局部常量
static NSString *const coder = @"你好";
// 常量
const NSString *coder;// *corder不能被修改 corder可以被修改
NSString const *coder;// *corder不能被修改 corder可以被修改
NSString *const coder;// *corder可以被修改 corder不能被修改
// const右边的不能被修改
// 当我们定义一个常量且不想被修改应该使用 NSString *const coder;

二.结构体( struct )和类( class )的区别

struct 和 class都可以将多个数据封装为一个整体

// 结构体(struct)
struct People {
NSString *name;
int age;
CGFloat height;
};
// 类(class)
@interface People : NSObject {
NSString *name;
int age;
CGFloat height;
}
@end
  • struct 只能封装数据,class可以封装行为
  • struct 变量分配在栈空间(如果是一个局部变量的情况下),class对象分配在堆空间。
  • 赋值 :结构体是(拷贝),对象之间是(地址)
  • 如果待封装的数据有属性也有方法,只能使用class
  • 如果属性较少,使用struct(分配在栈,提高运行效率);属性较多时使用class

三.@synthesize和@dynamic的区别

@dynamic 需要自己实现 setter getter方法

@synthesize 系统会自动生成 setter getter方法,默认定义一个属性时,系统会自动生成,不需要自己手动写,自己手动添加 setter 或 getter方法后会覆盖系统默认的 setter 和 getter 方法。

阅读全文 »

阅读全文 »