结构体和类的区别-Objective-C基础
1 結(jié)構(gòu)體 與類的相同點(diǎn)
都可以將多個(gè)數(shù)據(jù)封裝為1個(gè)整體
struct Date{
int year;
int month;
int day;
}
@interface Date :NSObject
{
int year;
int month;
int day;
}
@end
2 結(jié)構(gòu)體與類的不同點(diǎn)
1) 結(jié)構(gòu)體只能封裝數(shù)據(jù) 而類不僅可以封裝數(shù)據(jù) 還可以封裝行為。
2) 1結(jié)構(gòu)體變量分配 在棧空間 (如果是1個(gè)局部變量的情況下
而對(duì)象分配在堆空間
沾的特點(diǎn) 空間相對(duì)較小 但是存儲(chǔ)在棧中的數(shù)據(jù)訪問(wèn)的效率更高一些
堆的特點(diǎn) 空間相對(duì)較大, 但是存儲(chǔ)在堆中的數(shù)據(jù)訪問(wèn)的效率相對(duì)要低
存儲(chǔ)在棧中的數(shù)據(jù)訪問(wèn)效率高,存儲(chǔ)在堆中的數(shù)據(jù)訪問(wèn)效率低
3)
賦值
結(jié)構(gòu)體 Student
類 Perosn
Student s1 = {“jack”,19,GenderMale};
Student s2 = s1;
Person *p1 = [Person new];
Person *p2 = p1;
3 .應(yīng)用場(chǎng)景
1) 如果表示的這個(gè)實(shí)體 不僅是由多個(gè)數(shù)據(jù)組成 ,這個(gè)是實(shí)體還有行為 ,不解釋 只能使用類
2) 如果表示的實(shí)體沒(méi)有行為 光有屬性
a。 如果屬性較少 只有幾個(gè) 那么這個(gè)時(shí)候就定義為結(jié)構(gòu)體,分配在沾 提高效率
b 如果屬性較多 不要定義成結(jié)構(gòu)體
因?yàn)檫@樣結(jié)構(gòu)體變量會(huì)在棧中占據(jù)很大1塊空間,反而會(huì)影響效率
定義為類
枚舉類型
main 方法代碼
Author *a1 = [Author new];
[a1 setName:@“xxx斯基”];
[a1 setAge:68];
[a1 setGender:GenderMale];
Book *b1 = [Book new];
[b1 setName:@“鋼鐵是怎么練成的”];
[b1 setPublishDate:(Date){1998,12,12}];
[b1 setPublisherName:@“人民郵電出版社”];
[b1 setAuthor:a1];
Student *s1 = [Student new];
[s1 setName:@“小東”];
[s1 setAge:18];
[s1 setGender:GenderFemale];
[s1 setBook:b1];
typedef enum
{
GenderMale, //男
GenderFemale //女
} Gender;
Person : NSObject
{
NSString *_name;
int _age;
Gender _gender;
}
-(void)setName:(NSString *)name;
-(NSString *)name;
-(void)setGender:(Gender)gender;
-(Gender)gender;
-(void)setAge:(int)age;
-(int)age;
-(void)setName:(NSString *)name
{
_name=name;
}
-(NSString *)name
{return _name;
}
-(void)setGender:(Gender)gender{
_gender=gender;
}
-(Gender)gender{
return _gender;
}
-(void)setAge:(int)age{
_age=age;
}
-(int)age{
return _age;
}
Student : Person
{
NSString *_stuNumber;
Book *_book;
}
-(void)setBook:(Book *)book;
-(Book *)book;
-(void)setStuNumber:(NSString *)stuNumber;
-(NSString *)stuNumber;
-(void)setStuNumber:(NSString *)stuNumber{
_stuNumber = stuNumber;
}
-(NSString *)stuNumber{
return _stuNumber;
}
-(void)setBook:(Book *)book{
_book=book;
}
-(Book *)book{
return _book;
}
typedef struct{
int year;
int month;
int day;
} Date;
Book : NSObject{
NSString *_name;
NSString _publisherName;
Author *_author;
Date _publishDate;
}
-(void)setPublishDate:(Date)publishDate;
-(Date)publishDate;
-(void)setName:(NSString *)name;
-(NSString *)name;
-(void)setPublisherName:(NSString *)publisherName;
-(NSString *)publisherName;
-(void)setAuthor:(Author *)author;
-(Author *)author;
-(void)setPublishDate:(Date)publishDate
{
_publishDate= publishDate;
}
-(Date)publishDate{
return _publishDate;
}
-(void)setName:(NSString *)name{
_name=name;
}
-(NSString *)name{
return _name;
}
-(void)setPublisherName:(NSString *)publisherName{
_pushlisherName = publisherName;
}
-(NSString *)publisherName{
return _publisherName;
}
-(void)setAuthor:(Author *)author{
_author = author;
}
-(Author *)author{
return _author;
}
Author : Person
{
}
-(void) writeBook;
-(void) writeBook{
NSLog(@“一本曠世著作就這么誕生了”);
}
總結(jié)
以上是生活随笔為你收集整理的结构体和类的区别-Objective-C基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu11.04下CUDA4.0的
- 下一篇: 开发人员,请爱护你的身体