黑马程序员——IOS基础——OC面向对象四开发技巧

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,编译器就不会自动生成不存在的成员变量


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值