黑马程序员 -- OC语言 NSString使用 点语法 构造 分类

来源:互联网 发布:贵州大数据交易所 编辑:程序博客网 时间:2024/05/21 17:20
------- android培训、.Net培训、IOS培训碧空海的技术博客,期待与您交流!----------

第三讲  NSString使用 点语法 构造 分类 

A.NSString使用

1.NSString字符串处理类。NSLog中显示字符串用%@

Int main()

{

//创建OC字符串的第一种方式

NSString *str = @”itcast”;

NSString *str1 = @”呵呵itcast”;

Int size  =  [str  length];//size = 6,这个方法计算的是字符个数(字数)

Int size 1 =  [str1 length];//size = 8,这个方法计算的是字符个数(字数),字数包括空格

//Char *p = “name”;

//NSLog(@”%s”, name);

NSLog(@”%@”, str);

//NSString的类方法

Int age = 20;

Int no = 45;

//创建OC字符串的第二种方式

NSString *newstr = [NSStringstringWithFormat:@”ni   %d   shi %d”, age, no];

NSLog(@”%@”, newstr);

Return 0;

}

@interface Person :NSObject

{

//创建字符串成员变量这样写

NSString *_name;

}

@end

2.作业讲解

a.书写注释格式应为:int _weight; // 重量(加空格以便整齐)

b.包含头文件用#import,而不采用#include,包含本地的头文件用<xxx.h>,而不能用”xxx.h”

c.项目需求不懂的时候,必须要问个明白,不然的话,项目做成了而和需求有违背,那么问题就大了

#import<Foundation/Foundation.h>

#import<math.h>

//点类

@interface Point2D :NSObject

{

Double _x;

Double _y;

}

//x的set和get方法

-(void)setX:(double)x;

-(double)x;

//y的set和get方法

-(void)setY:(double)y;

-(double)y;

//同时设置x和y

-(void)setXandY:(double)x andY:(double)y;

//计算跟其他点的距离

-(double)distanceWithOther:(Point2D*)other;

//计算两点之间的距离

-(double)distanceBetweenPoint1:(Point2D*)p1 andPoint2D:(Point2D *)p2;

@end

@implemention Point2D

-(void)setX:(double)x;

{

_x = x;

}

-(double)x;

{

Return _x;

}

-(void)setY:(double)y;

{

_y = y;

}

-(double)y;

{

Return _y;

}

-(void)setXandY:(double)x andY:(double)y

{

_x = x;

_y = y;

或者

Self->_x = x;

Self->_y = y;

或者

[self setX:x];

[self setY:y];

}

//计算跟其他点的距离

-(double)distanceWithOther:(Point2D *)other

{

//利用对象方法,调用类方法来实现。

Return [Point2D distanceBetweenPoint1:selfandPoint2D:other];

或者一步一步计算

Double xDelta = _x – [other x]; //[other x]这种写法是利用创建的类对象,运用get方法实现。

// Double xDelta =self-> _x –other->x;

// Double xDelta =[self x] –[other x];

}

//计算两点之间的距离

-(double)distanceBetweenPoint1:(Point2D*)p1 andPoint2D:(Point2D *)p2;

{

//类方法调用对象方法实现

Return [p1 distanceWithOther:p2];

}

@end

//设计一个圆类

@interface Circle :NSObject

{

Double _radius; //半径

Point2D *_point; //圆心

}

//半径的set和get方法

-(void)setRadius:(double)radius;

-(double)radius;

//圆心的set和get方法

-(void)setPoint:(Point2D *)point;

-( Point2D *) point;

 

@end

@implemention Circle

-(void)setRadius:(double)radius;

{

_radius = radius;

}

-(double)radius;

{

Return _radius;

}

 

-(void)setPoint:( Point2D *) point;

{

_point = point;

}

-( Point2D *) point;

{

Return _point;

}

@end

Int main()

{

//创建圆对象

Circle *c1 = [Circle new];

//创建圆心对象

Point2D *p1 = [Point2D new];

[p1 setXandY:10 andY:15];

//设置圆心

[c1 setPoint:p1];

Return 0;

}

//代码在内存中的存储细节


//设计关于两个圆是否重叠,用类方法和对象方法实现。


B.多文档抽取

1.在C语言中的实现,声明文件和实现文件单独放置在不同的文件中(.h和.c)


2.在OC语言中,(.m和.h文件)


C.点语法

1.点语法定义

@interface Person : NSObject

-(void)setAge:(int)age;

-(int)age;

@end

@implemention Person

-(void)setAge:(int)age

{

-age = age;

}

-(int)age

{

Return 0;

}

@end

Int main()

{

Person *p = [Person new];

//点语法的本质还是方法调用,在执行下面的文件时,会自动转化为[p setAge:52]set方法。

p.age = 52;

//点语法的get方法, 在执行下面的文件时,会自动转化为Int a = [p age]get方法。

Int a = p.age;

//////////////

[p setAge:52];

Int a = [p age];

Return 0;

}


2.点语法运用注意

 

a.点语法必须的set方法放在get方法前面。

p.age = 10; //set方法

int a = p.age; //get方法


b.单独用点语法的时候,成员变量的set和get方法还是必须有的。如果没有在调用的时候会出项报错现象。


D.成员变量作用域

1.成员变量声明在类中

@interface Person : NSObject

{

 Int_age;

Int _height;

}

-(void)test;

@end

@implemention Person

-(void)test

@end

2.成员变量作用域(能不能直接访问(通过变量名访问))有四种

a. @private:只能在当前类的实现@implemention中直接访问。

b. @protected:可以在当前类以及子类的实现@implemention中直接访问。

c.@public:任何地方都是可以直接访问。

d.@package:同一个“体系内”(框架)可以访问,介于@private和@public之间

@interface Person : NSObject

{

@public

Int _age; //公有类型,任何地方都是可以直接访问。

@private

Int _height; //私有类型,只能在当前类的实现@implemention中直接访问(在子类中存在只是不能直接用)。

@protected

Int _name; //受保护的类型,可以在当前类以及子类的实现@implemention中直接访问。

}

-(void)test;

@end


E.Xcode自动生成set方法和get方法(使用@property和@synthesize类)

1. @property

//声明

@interface Person : NSObject

{

 Int_age;

Int _height;

}

//set方法和get方法

-(void)setAge:(int)age;

-(int)age;

//利用编译器特性,使用@property

@property int age; //自动生成成员变量_age的set方法和get方法的声明

-(void)test;

@end

//实现

@implemention Person

-(void)test

@end

2. @synthesize

//实现

@implemention Person

//set方法和get方法

-(void)setAge:(int)age

{

_age = age;

}

-(int)age

{

Return _age;

}

//使用@synthetic类自动生成set方法和get方法的实现,并且会访问_age这个成员变量

@synthetic age = _age; //这样写替代上面的set和get方法。

-(void)test

@end

3. 使用@property和@synthesize类的最简写法

//在声明中,类型相同时这样写

@property int age, height;

//在实现中,类型相同时

@synthesize age = _age, height = _height;

//@property仅仅只在声明中写了就行,因为他可以自动生成set方法和get方法的声明和实现。在程序中可以省去@synthetic这个方法。

a.@propertyint age;



0 0
原创粉丝点击