OC中关键字@property,便利构造器,对象初始化的综合使用
2015-12-22 22:55
423 查看
1.属性的特性:影响属性的setter getter
方法内部
2.属性的特新第二类
原子性
atomic
原子性,保证实例变量在多线程访问下是安全的,通过不断的枷锁实现在同一时刻实例变量你只能被一个县城访问名单上不断增加的枷锁会耗费大量的cpu性能,所以是默认的,我们一般不会采用
nonatomic
非原子性,属性常用的修饰符
@property(nonatomic)NSString *hobby;
3.属性的特性第三类
语义特性
assign
修饰的属性是非对像类型,给一般的数据类型变量直接赋值。语意不同直接决定了对应的setter getter方法内部实现的不同,并且assign是默认的语意特性。
retain
所有的对象类型的属性都可以用 retain来修饰。
copy
也是用来修饰对象类型的属性但是一定要保证属性类型代表属性类性的这个类必须接收了NSCopying。而且实现了copyWithZone:方法,字符串通常用copy来修饰。
@property(nonatomic, copy) NSString *hobby;
下面我们通过一道综合例题来体现property关键字,便利构造器,对象初始化的综合使用:
例题:
创建⼀个Fraction类(分数)实现分数的加减乘除,⽐较⼤⼩、约分等⽅法。
提⽰:1.声明属性 menber(代表分⼦)、denominator(分母)。
2.声明⾃定义初始化⽅法、便利构造器,⽤于给分⼦分母赋值。
3.声明功能⽅法。
//在.h文件中
#import <Foundation/Foundation.h>
@interface Fraction :
NSObject
//声明变量
@property(nonatomic)
NSInteger menber;
@property(nonatomic)NSInteger denominator;
//初始化方法
-(instancetype)initWithMember:(NSInteger)menber denominator:(NSInteger)denominator;
//便利构造器
+(Fraction *)fractionWithMember:(NSInteger)menber denominator:(NSInteger)denominator;
//依次是加减乘除法
-(Fraction *)addFraction:(Fraction *)anotherFraction;
-(Fraction *)subFraction:(Fraction *)anotherFraction;
-(Fraction *)mulFraction:(Fraction *)anotherFraction;
-(Fraction *)movFraction:(Fraction *)anotherFraction;
//依次是约分,比较,显示结果方法
-(void)reduce;
-(void)compare:(Fraction *)fraction;
-(void)showResult;
//在.m文件中
#import "Fraction.h"
@implementation Fraction
-(instancetype)initWithMember:(NSInteger)menber denominator:(NSInteger)denominator{
self = [super init];
if (self)
{
self.menber = menber;
self.denominator = denominator;
}
return self;}
+(Fraction *)fractionWithMenber: (NSInteger)menber denominator:(NSInteger)denominator{
return [[Fraction alloc] initWithMenber:menber denominator: denominator];
}
-(Fraction *)addFraction:(Fraction *)anotherFraction{
Fraction *newFraction = [Fraction
frctionWithMember:0
denominator:1];
newFraction.member =
self.member * anotherFraction.denominator +
self.denominator * anotherFraction.member;
newFraction.denominator =
self.denominator * anotherFraction.denominator;
[newFraction reduce];
return newFraction;
}
-(Fraction *)subFraction:(Fraction *)anotherFraction{
Fraction *newfraction1 = [Fraction
frctionWithMember:0
denominator:1];
newfraction1.member =
self.member * anotherFraction.denominator -
self.denominator * anotherFraction.member;
newfraction1.denominator =
self.denominator * anotherFraction.denominator;
[newfraction1 reduce];
return newfraction1;
}
-(Fraction *)mulFraction:(Fraction *)anotherFraction{
Fraction *newfraction2 = [Fraction
frctionWithMember:0
denominator:1];
newfraction2.member =
self.member * anotherFraction.member;
newfraction2.denominator =
self.denominator *
self.denominator;
[newfraction2 reduce];
return newfraction2;
}
-(Fraction *)movFraction:(Fraction *)anotherFraction{
Fraction *newfraction3 = [Fraction
frctionWithMember:0
denominator:1];
newfraction3.member =
self.member * anotherFraction.denominator;
newfraction3.denominator =
self.denominator *
self.member ;
[newfraction3 reduce];
return newfraction3;
}
//约分方法
-(void)reduce{
//分子依次减一,直到被分子分母都能整除的数 index是最大公约数
//将index长整形转换成int型的数据类型用到 了 abs(int)这个方法
for (int index =
abs((int)self.member); index >
1; index--) {
if (0 ==
self.member % index &&
0 == self.denominator % index) {
self.member /= index;
self.denominator /= index;
return ;
}
}
}
//比较两个分数大小
-(void)compare:(Fraction *)fraction{
Fraction *newfraction = [self
subFraction:fraction];
if (newfraction.member * newfraction.denominator >
0) {
NSLog(@"前面大");
}else
if(newfraction.member * newfraction.denominator <
0){
NSLog(@"后者大");
}else{
NSLog(@"一样大");
}
}
//显示结果的方法
-(void)showResult{
if (self.member *
self.denominator >=
0) {
if (0 ==
self.member) {
NSLog(@"0");
}
else {
<
a6b6
/span>NSLog(@"%d/%d",abs((int)self.member),abs((int)self.denominator));
}
}else {
NSLog(@"-(%d/%d)",abs((int)self.member),abs((int)self.denominator));
}
}
@end
//在main.m文件中
#import <Foundation/Foundation.h>
#import "Fraction.h"
int main(int argc,
const char * argv[]) {
Fraction *f1 = [Fraction
fractionWithMember:30
denominator:10];
Fraction *f2 = [Fraction
fractionWithMember:100
denominator:20];
Fraction *add = [f1
addFraction:f2];
Fraction *sub = [f1
subFraction:f2];
Fraction *mul = [f1
mulFraction:f2];
Fraction *mov = [f1
movFraction:f2];
[add
showResult];
[sub
showResult];
[mul
showResult];
[mov
showResult];
return
0;
}
方法内部
2.属性的特新第二类
原子性
atomic
原子性,保证实例变量在多线程访问下是安全的,通过不断的枷锁实现在同一时刻实例变量你只能被一个县城访问名单上不断增加的枷锁会耗费大量的cpu性能,所以是默认的,我们一般不会采用
nonatomic
非原子性,属性常用的修饰符
@property(nonatomic)NSString *hobby;
3.属性的特性第三类
语义特性
assign
修饰的属性是非对像类型,给一般的数据类型变量直接赋值。语意不同直接决定了对应的setter getter方法内部实现的不同,并且assign是默认的语意特性。
retain
所有的对象类型的属性都可以用 retain来修饰。
copy
也是用来修饰对象类型的属性但是一定要保证属性类型代表属性类性的这个类必须接收了NSCopying。而且实现了copyWithZone:方法,字符串通常用copy来修饰。
@property(nonatomic, copy) NSString *hobby;
下面我们通过一道综合例题来体现property关键字,便利构造器,对象初始化的综合使用:
例题:
创建⼀个Fraction类(分数)实现分数的加减乘除,⽐较⼤⼩、约分等⽅法。
提⽰:1.声明属性 menber(代表分⼦)、denominator(分母)。
2.声明⾃定义初始化⽅法、便利构造器,⽤于给分⼦分母赋值。
3.声明功能⽅法。
//在.h文件中
#import <Foundation/Foundation.h>
@interface Fraction :
NSObject
//声明变量
@property(nonatomic)
NSInteger menber;
@property(nonatomic)NSInteger denominator;
//初始化方法
-(instancetype)initWithMember:(NSInteger)menber denominator:(NSInteger)denominator;
//便利构造器
+(Fraction *)fractionWithMember:(NSInteger)menber denominator:(NSInteger)denominator;
//依次是加减乘除法
-(Fraction *)addFraction:(Fraction *)anotherFraction;
-(Fraction *)subFraction:(Fraction *)anotherFraction;
-(Fraction *)mulFraction:(Fraction *)anotherFraction;
-(Fraction *)movFraction:(Fraction *)anotherFraction;
//依次是约分,比较,显示结果方法
-(void)reduce;
-(void)compare:(Fraction *)fraction;
-(void)showResult;
//在.m文件中
#import "Fraction.h"
@implementation Fraction
-(instancetype)initWithMember:(NSInteger)menber denominator:(NSInteger)denominator{
self = [super init];
if (self)
{
self.menber = menber;
self.denominator = denominator;
}
return self;}
+(Fraction *)fractionWithMenber: (NSInteger)menber denominator:(NSInteger)denominator{
return [[Fraction alloc] initWithMenber:menber denominator: denominator];
}
-(Fraction *)addFraction:(Fraction *)anotherFraction{
Fraction *newFraction = [Fraction
frctionWithMember:0
denominator:1];
newFraction.member =
self.member * anotherFraction.denominator +
self.denominator * anotherFraction.member;
newFraction.denominator =
self.denominator * anotherFraction.denominator;
[newFraction reduce];
return newFraction;
}
-(Fraction *)subFraction:(Fraction *)anotherFraction{
Fraction *newfraction1 = [Fraction
frctionWithMember:0
denominator:1];
newfraction1.member =
self.member * anotherFraction.denominator -
self.denominator * anotherFraction.member;
newfraction1.denominator =
self.denominator * anotherFraction.denominator;
[newfraction1 reduce];
return newfraction1;
}
-(Fraction *)mulFraction:(Fraction *)anotherFraction{
Fraction *newfraction2 = [Fraction
frctionWithMember:0
denominator:1];
newfraction2.member =
self.member * anotherFraction.member;
newfraction2.denominator =
self.denominator *
self.denominator;
[newfraction2 reduce];
return newfraction2;
}
-(Fraction *)movFraction:(Fraction *)anotherFraction{
Fraction *newfraction3 = [Fraction
frctionWithMember:0
denominator:1];
newfraction3.member =
self.member * anotherFraction.denominator;
newfraction3.denominator =
self.denominator *
self.member ;
[newfraction3 reduce];
return newfraction3;
}
//约分方法
-(void)reduce{
//分子依次减一,直到被分子分母都能整除的数 index是最大公约数
//将index长整形转换成int型的数据类型用到 了 abs(int)这个方法
for (int index =
abs((int)self.member); index >
1; index--) {
if (0 ==
self.member % index &&
0 == self.denominator % index) {
self.member /= index;
self.denominator /= index;
return ;
}
}
}
//比较两个分数大小
-(void)compare:(Fraction *)fraction{
Fraction *newfraction = [self
subFraction:fraction];
if (newfraction.member * newfraction.denominator >
0) {
NSLog(@"前面大");
}else
if(newfraction.member * newfraction.denominator <
0){
NSLog(@"后者大");
}else{
NSLog(@"一样大");
}
}
//显示结果的方法
-(void)showResult{
if (self.member *
self.denominator >=
0) {
if (0 ==
self.member) {
NSLog(@"0");
}
else {
<
a6b6
/span>NSLog(@"%d/%d",abs((int)self.member),abs((int)self.denominator));
}
}else {
NSLog(@"-(%d/%d)",abs((int)self.member),abs((int)self.denominator));
}
}
@end
//在main.m文件中
#import <Foundation/Foundation.h>
#import "Fraction.h"
int main(int argc,
const char * argv[]) {
Fraction *f1 = [Fraction
fractionWithMember:30
denominator:10];
Fraction *f2 = [Fraction
fractionWithMember:100
denominator:20];
Fraction *add = [f1
addFraction:f2];
Fraction *sub = [f1
subFraction:f2];
Fraction *mul = [f1
mulFraction:f2];
Fraction *mov = [f1
movFraction:f2];
[add
showResult];
[sub
showResult];
[mul
showResult];
[mov
showResult];
return
0;
}
相关文章推荐
- Python动态类型的学习---引用的理解
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解
- php中将一个对象保存到Session中的方法
- php对象和数组相互转换的方法