变量,构造方法

Posted jianze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量,构造方法相关的知识,希望对你有一定的参考价值。

一、property属性

在类中定义成员变量时,使用

1 @interface Person: NSObject{
2 
3     NSString *name;
4 
5 }
6 @end

时,需自己定义getter和setter方法,比较麻烦,而使用property时,系统自动定义了getter和setter方法,比较简便

 1 #import <Foundation/Foundation.h>
 2 #import "Car.h"
 3 
 4 @interface Person : NSObject
 5 
 6 @property (nonatomic, strong) NSString *name;
 7 @property (nonatomic, strong) Car *che;
 8 
 9 - (void)showCar;
10 
11 @end
 1 #import <Foundation/Foundation.h>
 2 
 3 typedef enum : NSUInteger {
 4     kCarTypeA3,//0
 5     kCarTypeA4,//1
 6     kCarTypeA5//2
 7 } kCarType;
 8 
 9 @interface Car : NSObject
10 
11 @property (nonatomic, strong) NSString *color;
12 @property (nonatomic, strong) NSString *brand;
13 @property (nonatomic, assign) kCarType type;
14 
15 @end

 

在主函数中调用:

 1 #import <Foundation/Foundation.h>
 2 #import "Car.h"
 3 #import "Person.h"
 4 
 5 int main(int argc, const char * argv[]) {
 6     @autoreleasepool {
 7         Car *cc = [Car new];
 8         [cc setColor:@"褐色"];
 9         cc.brand = @"大众";
10         cc.type = kCarTypeA3;
11         
12         Person *pp = [Person new];
13         pp.name = @"jack";
14         pp.che = cc;
15         
16         [pp showCar];
17         
18     }
19     return 0;
20 }

总结以下几点:

1.set方法:[cc setColor:@"red"]; 或者cc.color = @"red";

2.get方法:[cc name];或者cc.name;

3.点语法只能用于property属性的变量

 

二、构造方法

1.概念:自定义初始化方法 init方法,在创建这个对象的同时 对这个对象进行初始化,initWith开头,通常有3种返回类型 

- (id)

- (Car *)

- (instancetype)

2.用法举例

 1 #import <Foundation/Foundation.h>
 2 
 3 typedef enum : NSUInteger {
 4     kCarTypeA3,//0
 5     kCarTypeA4,//1
 6     kCarTypeA5//2
 7 } kCarType;
 8 
 9 @interface Car : NSObject
10 
11 @property (nonatomic, strong) NSString *color;
12 @property (nonatomic, strong) NSString *brand;
13 @property (nonatomic, assign) kCarType type;
14 
15 - (instancetype)initWithColor:(NSString *)aColor
16                      andBrand:(NSString *)aBrand
17                       andType:(kCarType)aType;
18 
19 @end
 1 #import "Car.h"
 2 
 3 @implementation Car
 4 
 5 //重写父类的init方法
 6 - (instancetype)init{
 7     //nil空 NULL指针为空
 8     //super 告诉编译器从我的上一级去查找(父类)
 9     //self 如果初始化失败 返回nil
10     self = [super init];
11     
12     if (self != nil) {
13         self.color = @"黑色";
14         self.brand = @"大众";
15         self.type = kCarTypeA4;
16     }
17     
18     return self;
19 }
20 
21 - (instancetype)initWithColor:(NSString *)aColor
22                      andBrand:(NSString *)aBrand
23                       andType:(kCarType)aType{
24     self = [super init];
25     
26     if(self != nil){
27         self.color = aColor;
28         self.brand = aBrand;
29         self.type = aType;
30     }
31     return self;
32 }
33 @end

3.注意:

1??self = [super init];是对对象进行初始化,如果失败,则返回nil代表没有内存,成功则返回对象,NSString *str = nil; str没有内存,不存在

2??一般自己重写构造方法,即用initWith,可随意改变初始值

以上是关于变量,构造方法的主要内容,如果未能解决你的问题,请参考以下文章

java代码块,静态代码块,静态变量,构造方法执行顺序

如何使用Android片段管理器传递变量[重复]

静态代码块静态变量构造方法及构造块执行顺序

如何缓存片段视图

Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法

关于静态块静态属性构造块构造方法的执行顺序