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







资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值