1、結(jié)構(gòu)體只能封裝屬性,類卻不僅可以封裝屬性也可以封裝方法。如果一個(gè)封裝的數(shù)據(jù)有屬性也有行為,就只能用類了。
2、結(jié)構(gòu)體變量分配在棧,而OC對(duì)象分配在堆,棧的空間相對(duì)于堆來(lái)說(shuō)是比較小的,但是存儲(chǔ)在棧中的數(shù)據(jù)訪問(wèn)效率相對(duì)于堆而言是比較高
3、堆的存儲(chǔ)空間比較大,存儲(chǔ)在堆中的數(shù)據(jù)訪問(wèn)效率相對(duì)于棧而言是比較低的
4、如果定義一個(gè)結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體中有很多屬性,那么這個(gè)時(shí)候結(jié)構(gòu)體變量在棧中會(huì)占據(jù)很多空間,這樣的話就會(huì)降低效率
5、我們使用結(jié)構(gòu)體的時(shí)候最好是屬性比較少的結(jié)構(gòu)體對(duì)象如果屬性較多的話就要使用類了。
6、結(jié)構(gòu)體賦值的話是直接賦值,對(duì)象的指針,賦值的是對(duì)象的地址。
一、結(jié)構(gòu)體的定義與調(diào)用
(介紹比較全的文章:https://www.cnblogs.com/jerehedu/p/5192912.html)
(文章鏈接:https://www.cnblogs.com/QianChia/p/5780956.html)
// 定義結(jié)構(gòu)體類型
// 結(jié)構(gòu)體類型名為 MyDate1
struct MyDate1 {
int year;
int month;
int day;
};
// 定義結(jié)構(gòu)體類型變量
// 結(jié)構(gòu)體類型變量為 d1,并賦值
struct MyDate1 d1 = {2016, 1, 6};
// 結(jié)構(gòu)體類型變量值的調(diào)用
NSLog(@"d1: %d/%d/%d", d1.year, d1.month, d1.day);
二、typedef 定義結(jié)構(gòu)體與調(diào)用
// 定義結(jié)構(gòu)體類型
// _MyDate 可省略,結(jié)構(gòu)體類型名為 MyDate2
typedef struct _MyDate {
int year;
int month;
int day;
} MyDate2;
// 定義結(jié)構(gòu)體類型變量
// 結(jié)構(gòu)體類型變量為 d2,并賦值
MyDate2 d2 = {2016, 5, 24};
// 結(jié)構(gòu)體類型變量值的調(diào)用
NSLog(@"d2: %d/%d/%d", d2.year, d2.month, d2.day);