IOS学习笔记——object-C基础 (二)

NSString具有共享机制。NSMutableString不具共享机制。

NSMutableString最好预估好长度。如

 NSMutableString *mustr3 =[NSMutableString stringWithCapacity:100];

NSArray(元素必须是类对象,具有常量性)初始化方式:

//----------------NSArray初始化-------------
    NSArray *array1=[NSArray arrayWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil];
    
    NSArray *array2=[[NSArray alloc] initWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil];
    
    NSArray *array3=@[@"Shanghai",@"Beijing",@"New York",@"Paris"];

obj-c的集合类型有三种如下:


NSArray具有常量性不能被改变,存的都是对象的指针,指针不能改变,但是指针所指向的那个对象属性什么的是可以改变的。如果数字什么的想放入,先要转成类如:

    //----------------数组元素-------------
    NSString *text=@"Panda";//字符串对象
    NSInteger number=100;
    NSNumber *numberObject1=
        [NSNumber numberWithInteger:number ];//使用NSNumber将NSInteger包装为对象
    NSNumber *numberObject2=@300u;//使用字面常量初始化
    Point point;
    point.h=100;
    point.v=200;
    NSValue *pointObject=
        [NSValue value:&point withObjCType:@encode(Point)];//使用NSValue将struct包装为对象
    NSNull* nullValue=[NSNull null];
    NSArray *array4=@[text, numberObject1,numberObject2,pointObject, nullValue];
    NSLog(@"array4: %@" ,array4);





NSMutableArray是NSArray的子类支持改变数组长度和元素指针,初始化后会分配一个缓存容量capacity,当元素数量超过会以近似2倍的速度增长。如:

 NSMutableArray *muArray2=[NSMutableArray arrayWithCapacity:10];

  
    BLNPoint *p5=[[BLNPoint alloc] initWithX:50 WithY:100];
    
    //1. 更改元素长度-----不可以!
    //[array5 addObject:p5];
    
    //2. 更改元素指针-----不可以!
    //array5[0]=p5;
    
    //3. 更改指针指向的内容-----可以!
    for(int i=0;i<array5.count;i++){
        BLNPoint *pt= array5[i];
        pt.x++;
        pt.y++;
    }
    NSLog(@"array5: %@", array5);
    
    
    
    //----------------数组的遍历-------------
    
    //快速枚举 最快
    for ( BLNPoint* point in array5)
    {
        point.x++;
        point.y++;
    }
    
    //迭代器模式 较慢
    NSEnumerator *enumerator = [array5 objectEnumerator];
    BLNPoint* item;
    while (item = [enumerator nextObject])
    {
        item.x++;
        item.y++;
    }
    
    
    //for循环 最慢
    for (int i=0; i<array5.count; i++) {
        NSLog(@"array5[%d],%@",i,array5[i]);
    }
    





关于协议:

#import <Foundation/Foundation.h>

@protocol Drawable

@property  NSInteger x;
@property  NSInteger y;

-(void)draw; //默认都是@required,必须实现的
+(void)createShape;
//-(id)init;
//-(void)dealloc;

@optional  //(可以选择实现)
-(void)moveToX:(NSInteger)x withY:(NSInteger)y;



@end
一个类可以有多个协议,如:

#import <Foundation/Foundation.h>

@interface Other : NSObject<NSObject,NSCopying,NSCoding,NSFastEnumeration>

@end

if ([obj conformsToProtocol:@protocol(AProtocol) ]) {//使用<span style="font-family: Arial, Helvetica, sans-serif;">conformsToProtocol可以检查是否实现了协议</span>

        [obj methodA];
    }

关于类别:

现有BLNPoint类,BLNPoint.h

#import <Foundation/Foundation.h>

@interface BLNPoint : NSObject
{
    float _weight;
}

@property NSInteger x;
@property NSInteger y;


-(void)move;


@end
BLNPoint.m

#import "BLNPoint.h"

@implementation BLNPoint


-(void)move
{
    NSLog(@"Point move ");
}


@end
BLNPoint+Drawing类BLNPoint+Drawing.h

#import <Foundation/Foundation.h>
#import "BLNPoint.h"


@interface BLNPoint(Drawing)

-(void)draw;


//@property NSInteger weight;

-(void)setWeight:(NSInteger)weight;
-(NSInteger)weight;


@end
BLNPoint+Drawing.m

#import "BLNPoint+Drawing.h"

@implementation BLNPoint(Drawing)


-(void)draw
{
    NSLog(@"Point draw");
}


-(void)setWeight:(NSInteger)weight
{
    NSLog(@"Point.setWeight");
    _weight=weight;
}

-(NSInteger)weight
{
    NSLog(@"Point.weight");
    return _weight;
}

-(NSString*) description{
    return [NSString stringWithFormat:@"[%ld,%ld]", (long)self.x, (long)self.y];
}



@end
BLNPoint.m多了draw等方法,可以

 BLNPoint *point=[[BLNPoint alloc]init];
        point.x=100;
        point.y=200;
        [point move];
        [point draw];//多出了<span style="font-family: Menlo; font-size: 11px;">BLNPoint+Drawing里面的方法</span>

扩展:

现有Circle类,Circle.h:

#import <Foundation/Foundation.h>


@interface Circle : NSObject

@property (readonly) NSInteger  radius;

-(NSInteger)getArea;

@end

Circle.m:

#import "Circle.h"

//扩展实现
@interface Circle ()
{
    NSString * _name;
}

@property (readwrite )NSInteger  radius;//修改读写属性

@property  NSInteger center;//添加属性

-(float)getDiameter;//实例方法

+(void)process:(Circle*) circle;//类方法

@end



@implementation Circle

+(void)process:(Circle*) circle
{
    
    [circle getDiameter];
    [circle getArea];
}


-(NSInteger)getArea{
    
    float area=M_PI*self.radius*self.radius;
    NSLog(@"Circle Area : %f",area);
    return area;
}

-(float)getDiameter{
    
    float diameter = 2*M_PI*self.radius;
    NSLog(@"Diameter : %f", diameter );
    return diameter;
}

@end







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值