NSString:
int main(){
NSString *str=@"itcast";//最简单的创建字符串的方式。
//char *name="itcast";
NSLog(@"%@",str);
//NSLog(@"%s",name);
int age = 15;
int no = 5;
NSString *name = @"jack";
int size=[name length];//字符串长度=4,算的是字数
//通过一个字符串和一些参数组合成另一个字符串
NSString *newStr = [NSString stringwithFormat:@"My age is %d and no is %d and name is%@",age,no,name);
NSLog(@" %@",newStr);
return 0;
}
/*
设计一个类Point2D,用来表示二维平面中某一个点
1>属性
*double _x
*double _y
2>方法
*属性相应的set和get方法
*设计一个对象方法同时设置x和y
*设计一个对象方法计算跟其他点的距离
*设计一个类方法计算两个点之间的距离
3>提示
*c语言math.h中有个函数:double pow(double n,double m);计算n的m次方
*c语言math.h中另一个函数:double sqrt(double n);计算n开二次根
*/
#import <Foundation/Foundation.h>
#import <math.h>
//声明:
@interface Point2D : NSObject
{
double _x;
double _y;
}
//声明_x setget
- (void)setX:(double)x;
- (double)x;
//声明_y setget
- (void)setY:(double)y;
- (double)y;
//声明:设计一个对象方法,同时设置x和y。
- (void)set:(double)x andY:(double)y;
//声明:设计一个对象方法,计算根其他点的距离。
- (double)distanceWithAnotherPoint:(Point2D *)another;
//声明:设计一个类方法,计算两个点之间的距离。
+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;
@end
//实现:
@implementation Point2D
//实现_x setget
- (void)setX:(double)x
{
_x=x;
}
- (double)x
{
return _x;
}
//实现_y setget
- (void)setY:(double)y
{
_y=y;
}
- (double)y
{
return _y;
}
//实现同时设置x和y
- (void)set:(double)x andY:(double)y
{
[self setX:x];//只需要在setget方法中一次性修改就可以
[self setY:y];
//_x=x;_y=y;当更改setget方法时,不方便修改。
}
//声明:设计一个对象方法,计算根其他点的距离。
- (double)distanceWithAnotherPoint:(Point2D *)another
{
//1.用于类方法调用对象方法
double firstpingfang=pow([self x]-[another x],2);
double secondpingfang=pow([self y]-[another y], 2);
return sqrt(firstpingfang+secondpingfang);
//2.利用对象方法调用类方法
//return [Point2D distanceBetweenPoint1:self andPoint2:another];
}
//声明:设计一个类方法,计算两个点之间的距离。
+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2
{
//1利用类方法调用对象方法
return [p1 distanceWithAnotherPoint:p2];
/*2.用于对象方法嗲用类方法
//(x1-x2)平方firstpingfang
double firstpingfang=pow([p1 x]-[p2 x],2);
//(y1-y2)平方secondpingfang
double secondpingfang=pow([p1 y]-[p2 y], 2);
//firstpingfang+secondpingfang开根号resultkaigenhao
return sqrt(firstpingfang+secondpingfang);
*/
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
XCode特色注释:
#pragma mark 今天学到这
#pragma mark - 姓名的setget
#pragma mark 姓名的set
#pragma mark 姓名的get
点语法:
Person *p =[Person new];
p.age=10;//点语法的本质还是方法调用,不是访问成员变量,自动转换成[p setAge:10];
int a=p.age;//此时自动转化成[p age];
//若直接访问成员变量,OC只有通过->来访问
但是注意:
使用点方法前必须得有setget方法
- (void) setAge:(int)age
{
_age = age;
NSLog(@"setAge");
//self.age=age;//会引发死循环
}
- (int)age
{
NSLog(@"age");
return _age;//或者return self->age;
//return self.age;//死循环
}
@public //在任何地方都能直接访问对象的成员变量
int _age;
@private //只能在当前类的对象方法中直接访问
int _height;
@protected //能在当前类和子类的对象方法中直接访问(默认)
int _weight;
声明的头h文件中:
@property int age;//可以自动生成setter getter 方法
相当于:
- (void)setAge:(int) age;
- (void)age;
实现的m文件中:
@synthesize age = _age;//可以自动实现setter getter 方法,并且会访问_age这个成员变量,
@synthesize age;//没有声明_age则自动生成声明age(不是_age)
@synthesize weight = _weight , height = _height;
极简:xcode4.4之后只需要一行代码就完成3件事:
1.声明setter getter
2.实现setter getter
3.声明_开头的成员变量
@property int age;//缺点在于自动生成的成员变量是私有的@private
若希望子类能访问成员变量,需要加一个声明:
@protected
int _age;
注意:
>若手动实现了setter,编译器就只会自动生成getter方法
>若手动实现了getter,编译器就只会自动生成setter方法
>若同时手动实现了setter和getter,编译器就不会自动生成不存在的成员变量