OC_第一个类,@property和@synthesize,Category,description方法

            OC_第一个类,@property和 @synthesize,Category,description方法

1

1.类的设计:

1>类名

* 类名的第一个字母必须是大写

* 不能有下划线

* 多个英文单词,用驼峰标识

2>属性

3>行为(功能)

例如:

.电脑

* 类名:Computer

* 属性:bandexpireDate

* 行为:openclose

 

2.一个完整的类

/*

 类名:Car

 属性:轮胎个数、时速(速度)

 行为:跑

 */

 

// 因为使用了NSObject

#import <Foundation/Foundation.h>

 

// 完整地写一个函数:函数的声明和定义(实现)

// 完整地写一个类:类的声明和实现

 

// 1.类的声明

// 声明对象的属性、行为

// : NSObject 目的是:让Car这个类具备创建对象的能力

@interface Car : NSObject

{//用来声明对象属性(实例变量\成员变量,默认会初始化为0

    // @public可以让外部的指针间接访问对象内部的成员变量

    @public

    int wheels;// 轮胎个数

    int speed;// 时速(xxkm/h)

}

 

// 方法(行为):方法名、参数、返回值(声明、实现)

// 只要是OC对象的方法,必须以减号 - 开头

// OC方法中任何数据类型都必须用小括号()扩住

// OC方法中的小括号():括住数据类型

- (void)run;

@end

 

// 2.类的实现

// 用来实现@inteface中声明的方法

@implementation Car

// 方法的实现(说清楚方法里面有什么代码)

 

- (void)run

{

   NSLog(@"车子跑起来了");

}

 

@end

 

int main()

{

    //OC中,想执行一些行为,就写上一个中括号[行为执行者行为名称]

    //利用类来创建对象

    //执行了Car这个类的new行为来创建新对象

   

    //定义了一个指针变量pp将来指向的是Car类型的对象

    // [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)

    Car*p = [Car new];

   

   

    Car*p2 = [Car new];

   p2->wheels =5;

   p2->speed =300;

    [p2run];

   

    //p所指向对象的wheels属性赋值

   p->wheels =4;

   p->speed =250;

   

    //p所指向对象发送一条run消息

    [prun];

   

   NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed);

   

    return0;

}

 

2@property和@synthesize

// @property:可以自动生成某个成员变量的settergetter声明

@propertyintage;

//- (void)setAge:(int)age;  //等效于这一串

//- (int)age;

@propertyintheight;

//- (void)setHeight:(int)height; //等效于这一串

//- (int)height;

 

// @synthesize自动生成agesettergetter实现,并且会访问_age这个成员变量

@synthesize age = _age;  //如果没有,活自动生成

@synthesize height = _height;

@synthesize weight = _weight, name = _name;

 

/*

 1.set方法内存管理相关的参数

 *retain : release旧值,retain新值(适用于OC对象类型)

 *assign :直接赋值(默认,适用于非OC对象类型)

 *copy   : release旧值,copy新值

 

 2.是否要生成set方法

 *readwrite :同时生成settergetter的声明、实现(默认)

 *readonly  :只会生成getter的声明、实现

 

 3.多线程管理

 *nonatomic :性能高 (一般就用这个)

 *atomic    :性能低(默认)

 

 4.settergetter方法的名称

 *setter :决定了set方法的名称,一定要有个冒号 :

 *getter :决定了get方法的名称(一般用在BOOL类型)

 */

 

//- (void)setBook:(Book *)book  //retain相当于做了这些操作

//{

//   if (_book != book)

//   {

//       [_book release];

//       

//       _book = [book retain];

//   }

//}

 

3 Category

/*

 分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法

 

 使用注意:

 1.分类只能增加方法,不能增加成员变量

 2.分类方法实现中可以访问原来类中声明的成员变量

 3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用

 4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 -->父类

 */

// 优先去分类中查找,然后再去原来类中找,最后再去父类中找

4description

Nslog函数输出以后执行的方法

// //决定了实例对象的输出结果

//- (NSString *)description

//{

//   //下面代码会引发死循环

//   // NSLog(@"%@", self);

//   return [NSString stringWithFormat:@"age=%d, name=%@", _age,_name];

//   //return @"3424324";

//}

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值