黑马程序员技术交流社区

标题: OC学习笔记3-类 属性 方法 [打印本页]

作者: 卧龙小    时间: 2014-9-22 14:38
标题: OC学习笔记3-类 属性 方法
本帖最后由 卧龙小 于 2014-9-22 15:39 编辑

对象是类的独特表示,每个对象都包含一些使用的信息,方法提供改变和访问这些数据的手段。
程序在逻辑上分为以下三部分
一 @interface  用于描述类和类的方法,类的声明
1.定义新类时,首先需要告诉Object-c编译器该类来自何处,必须为它的父类命名。
2.必须定义该类对象使用时,需要用到的方法类型
@interface NewClassName : ParentClassName
    propertAndMethodDeclarations;
@end;

实例:
  1. @interface Fraction : NSOject
  2. -(void) print;
  3. -(void) setNumerator : (int) n;
  4. -(void) setDenominator : (int)d;
  5. @end
复制代码

新类名字为Fraction,其父名为NSObject ,NSObject 类在 NSObject.h中定义,导入foundation.h 文件时,程序自动包含这个类
方法:-(void) print;
开头的负号(-)通知Object-c 编译器,该方法是一个实例方法,此外如果用(+)则表示类方法,类方法是对类本身执行某些操作的方法,不需要实例即可调用。

1.返回值
申明方法时,需要告诉编译器是否有返回值,如果有返回值,则需要注明是返回值的类型。返回值类型在正号和负号后的括号中注明

2.参数
参数通过参数名去的 括号 指明。


二@implementation 用于描述数据,类对象的实例变量存储的数据,并实现类声明的代码
@implementation 包含@interface 声明部分的实现,格式如下:
  1. @implementation NewClassName
  2. {
  3.     memberDeclarations
  4. }
  5. methodDefinitions
  6. @end
复制代码

NewClassName 表示名称和 @interface 名称相同,可以在父名称后使用冒号,如同@interface 部分使用冒号一样,但通常不这样做
@implementation Fraction:NSObject
memberDeclaration 部分指定了那种类型的数据将要存储到Fraction中,以及数据的名称,是类的实例变量
methodDefinitions 部分是实现@interface声明方法。

实例:
  1. @implementation Fraction
  2. {
  3.     int numerator;
  4.     int denominator;
  5. }


  6. -(void) print
  7. {
  8.     NSLog(@"%i/%i",numerator,denominator);
  9. }


  10. -(void) setNumerator:(int) n
  11. {
  12.     numerator=n;
  13. }


  14. -(void) setDenominator:(int) d
  15. {
  16.     denominator=d;
  17. }
  18. @end
复制代码

三 program部分  程序目录的实现功能

实例:
  1. int main(int argc,char * argv[])
  2. {
  3.     autoreleacepool{
  4.         Fraction *myFraction

  5.         //创建一个实例
  6.         myFraction = [Fraction alloc];
  7.         myFraction = [myFraction init];

  8.         //设置参数
  9.         [myFraction setNumerator:1];
  10.         [myFraction setDenominator:1];

  11.         //调用打印方法
  12.         NSLog(@"The value of myFraction is:");
  13.         [myFraction print];
  14.     }
  15. }
复制代码

说明:
Fraction *myFraction
表示创建了一个 Fraction 对象 myFraction ,* 表示myFraction 是 Fraction 对象的引用(或指针),变量myFraction 并不存储Fraction的数据,而是存储的一个引用,表面对象数据在内存中的位置,申明myFraction 时,它的值未定义,并且没有默认值。

myFraction = [Fraction alloc];
alloc 是 cllocate 的缩写,为新对象分配内存存储空间,alloc 方法保证对象所有实例变量都成初始状态,并返回存储数据的位置(对数据的引用),赋给实例


myFraction = [myFraction init];
init 方法用于初始化类的实例变量,init方法返回初始化的对象,并将返回值存储到myFraction变量中。
alloc init 方法通常组合在一起


myFraction=[[Fraction alloc]init];
通常把创始和初始合并到一行

Fraction *myFraction = [[Fraction allo] init];

注意:
在Xcode4.2之前,需要给对象发送release消息,通知系统释放内存对象,这在内存管理中成为手工引用计数,4.2之后,依靠系统来释放内存对象,实现了自动应用计数( automatic  reference counting)

作者: 闫跃文    时间: 2014-9-22 14:48
但是自动管理内存是在ios5之后在开始广泛应用的
作者: 卧龙小    时间: 2014-9-22 14:52
闫跃文 发表于 2014-9-22 14:48
但是自动管理内存是在ios5之后在开始广泛应用的

恩,这是之前的笔记。
作者: AngleMGG    时间: 2014-9-22 15:02
感觉有点不够规范。
类的创建,@interface和@end之间是声明部分(包括成员变量和方法),@implementation和@end之间则是放方法的实现部分;文中你的变量的声明为什么是放在@implementation和@end之间呢,是不是有点不合规范呢
作者: 卧龙小    时间: 2014-9-22 15:14
AngleMGG 发表于 2014-9-22 15:02
感觉有点不够规范。
类的创建,@interface和@end之间是声明部分(包括成员变量和方法),@implementation和 ...

恩,提的意见很中肯,这是最初接触OC 的笔记,粘贴过来有点凌乱。你提的问题,我查一下。谢谢,多交流,我新手,多指点下
作者: 卧龙小    时间: 2014-9-22 18:25
卧龙小 发表于 2014-9-22 15:14
恩,提的意见很中肯,这是最初接触OC 的笔记,粘贴过来有点凌乱。你提的问题,我查一下。谢谢,多交流, ...

我查了下文当,是可以的,但是有区别 全局变量 和 类内部全局变量的区别吧。
作者: 卧龙小    时间: 2014-9-22 18:27
AngleMGG 发表于 2014-9-22 15:02
感觉有点不够规范。
类的创建,@interface和@end之间是声明部分(包括成员变量和方法),@implementation和 ...

我查了下文当,是可以的,但是有区别 全局变量 和 类内部全局变量的区别
作者: songxing10000    时间: 2014-9-24 00:12
卧龙小 发表于 2014-9-22 18:27
我查了下文当,是可以的,但是有区别 全局变量 和 类内部全局变量的区别 ...

看你在这里发了这么多帖子,怎么技术分才5分啊,
作者: 萧雨流风    时间: 2014-9-24 08:32
总结的还是不错的吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2