您的位置:首页 > 运维架构

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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OC iOS 对象