自学iOS开发系列----OC(属性、点语法、修饰符)
2016-11-29 15:03
399 查看
属性和点语法
1.成员变量和属性
属性用@property来表示,自动生成setter和getter方法来操作变量。
成员变量需要手动生成setter和getter方法来操作变量。
利用成员变量和属性分别对LOL中的英雄名字赋值并输出赋值后的英雄名字:
①成员变量
新建Hero类
Hero.h文件
Hero.m文件
main.m文件
②属性
新建Hero类
Hero.h文件
Hero.m文件 (不做任何处理)
main.m文件
【注】点语法只是访问setter getter方法,不是使用成员变量
2.通过点语法,创建一个学生类,并对属性进行存取:姓名(name), 年龄(age), 身高(height)
新建Student类
Student.h文件
Student.m文件
main.m文件
修饰符
1.atomic和nonatomic
atomic表示是线程安全
nonatomic表示是非线程安全的,使用此属性性能会提高一些。(项目实战中大多数情况下使用此方法,atomic不作考虑)
2.readonly和readwrite
readonly表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法
readwrite表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法
3.assign
assign表示直接赋值,用于基本数据类型(NSUInteger和CGFloat)和C数据类型(int,float,double,char等),另外还有id类型,这个修饰符不会涉及到内存管理,但是如果是对象类型,使用此修饰符则可能会导致内存泄漏或EXC_BAD_ACCESS错误
4.copy
copy主要用在NSString类型,表示复制内容
5.strong、weak和retain
strong、weak和retain针对对象类型进行内存管理,如果对基本数据类型使用,则Xcode直接会报错。(此内容后面文章会详述,现阶段仅会使用即可)
ARC中使用strong表示强引用,weak表示弱引用
MRC中使用retain来管理内存
【注】一个属性可以添加多个修饰符,多个修饰符用逗号隔开
6.创建一个账户类,属性包括:姓名(),账户号码(),存储金额(),关联的电话号码()
新建Account类
Account.h文件
Account.m文件
main.m文件
1.成员变量和属性
属性用@property来表示,自动生成setter和getter方法来操作变量。
成员变量需要手动生成setter和getter方法来操作变量。
利用成员变量和属性分别对LOL中的英雄名字赋值并输出赋值后的英雄名字:
①成员变量
新建Hero类
Hero.h文件
#import <Foundation/Foundation.h> @interface Hero : NSObject { NSString * _name; } - (void)setName:(NSString *)name; - (NSString *)name; @end
Hero.m文件
#import "Hero.h" @implementation Hero - (void)setName:(NSString *)name { _name = name; } - (NSString *)name { return _name; } @end
main.m文件
#import <Foundation/Foundation.h> #import "Hero.h" int main(int argc, const char * argv[]) { @autoreleasepool { Hero * hero = [[Hero alloc] init]; [hero setName:@"赵丽颖"]; NSString * strName = [hero name]; NSLog(@"LOL中英雄姓名:%@",strName); } return 0; }
②属性
新建Hero类
Hero.h文件
#import <Foundation/Foundation.h> @interface Hero : NSObject @property NSString * name; @end
Hero.m文件 (不做任何处理)
main.m文件
#import <Foundation/Foundation.h> #import "Hero.h" int main(int argc, const char * argv[]) { @autoreleasepool { Hero * hero = [[Hero alloc] init]; //hero.name在等号左边就是set方法 hero.name = @"赵丽颖"; //hero.name在等号右边就是get方法 NSString * strName = hero.name; NSLog(@"LOL中英雄姓名:%@",strName); } return 0; }
【注】点语法只是访问setter getter方法,不是使用成员变量
2.通过点语法,创建一个学生类,并对属性进行存取:姓名(name), 年龄(age), 身高(height)
新建Student类
Student.h文件
#import <Foundation/Foundation.h> @interface Student : NSObject @property NSString * name; @property int age; @property float height; - (void)logStudentInfo; @end
Student.m文件
#import "Student.h" @implementation Student - (void)logStudentInfo { NSLog(@"姓名 = %@\n年龄 = %d\n身高 = %f\ng",self.name,self.age,self.height); } @end
main.m文件
#import <Foundation/Foundation.h> #import "Student.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student * student = [[Student alloc] init]; student.name = @"唐嫣"; student.age = 23; student.height = 175.5; [student logStudentInfo]; } return 0; }
修饰符
1.atomic和nonatomic
atomic表示是线程安全
nonatomic表示是非线程安全的,使用此属性性能会提高一些。(项目实战中大多数情况下使用此方法,atomic不作考虑)
@property (atomic) NSString * name; @property (nonatomic) NSString * sex;
2.readonly和readwrite
readonly表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法
readwrite表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法
@property (readonly) NSString * name; @property (readwrite) NSString * sex;
3.assign
assign表示直接赋值,用于基本数据类型(NSUInteger和CGFloat)和C数据类型(int,float,double,char等),另外还有id类型,这个修饰符不会涉及到内存管理,但是如果是对象类型,使用此修饰符则可能会导致内存泄漏或EXC_BAD_ACCESS错误
@property (assign) int age;
4.copy
copy主要用在NSString类型,表示复制内容
@property (copy) NSString * name;
5.strong、weak和retain
strong、weak和retain针对对象类型进行内存管理,如果对基本数据类型使用,则Xcode直接会报错。(此内容后面文章会详述,现阶段仅会使用即可)
ARC中使用strong表示强引用,weak表示弱引用
MRC中使用retain来管理内存
@property (strong) NSArray * names;
【注】一个属性可以添加多个修饰符,多个修饰符用逗号隔开
6.创建一个账户类,属性包括:姓名(),账户号码(),存储金额(),关联的电话号码()
新建Account类
Account.h文件
#import <Foundation/Foundation.h> @interface Account : NSObject @property (nonatomic,copy) NSString * name; @property (nonatomic,assign) int number; @property (nonatomic,assign) float money; @property (nonatomic,retain) NSMutableArray* phoneNums; - (Account *)init; @end
Account.m文件
#import "Account.h" @implementation Account - (Account *)init { if (self = [super init]) { //实例化 self.phoneNums = [[NSMutableArray alloc] init]; } return self; } @end
main.m文件
#import <Foundation/Foundation.h> #import "Account.h" int main(int argc, const char * argv[]) { @autoreleasepool { Account * account = [[Account alloc] init]; account.name = @"赵丽颖"; account.number = 62122602; account.money = 23456.67; [account.phoneNums addObject:@"15711097547"]; [account.phoneNums addObject:@"13520865432"]; NSLog(@"姓名:%@,账户号码:%d,存储金额:%f",account.name,account.number,account.money); NSLog(@"关联电话:%@",account.phoneNums); } return 0; }
相关文章推荐
- iOS开发之OC语法基础(三)--属性、点语法
- 自学iOS开发系列----OC(类和对象)
- 自学iOS开发系列----OC(字典)
- 自学iOS开发系列----OC(数组)
- 自学iOS开发系列----OC(Xcode使用)
- 自学iOS开发系列----OC(字符串)
- 自学iOS开发系列----OC(继承)
- 自学iOS开发系列----OC(block)
- 自学iOS开发系列----OC(文件管理类、文件句柄类)
- 自学iOS开发系列----OC(内存管理)
- 自学iOS开发系列----OC(类别和扩展)
- 自学iOS开发系列----OC(协议和委托代理)
- IOS开发---OC语言-⑫点语法
- Objective-C(四、属性声明与功能,点语法)——iOS开发基础
- iOS开发之OC语法基础(六)--可见度
- 黑马程序员——零基础学习iOS开发——10 Object-C 面向对象思想、OC语法简介、对象、类、
- Objective-C(一、文件扩展名,驼峰标识法,#import与#include,OC弱语法)——iOS开发基础
- OC基础:属性.点语法.KVC 分类: ios学习 OC 2015-06-24 17:24 61人阅读 评论(0) 收藏
- 【iOS开发系列】用简单工厂模式理解OC反射机制
- iOS开发之OC语法基础(五)--字符串