分享
分销 收藏 举报 申诉 / 44
播放页_导航下方通栏广告

类型ObjectiveC20程序设计类.pptx

  • 上传人:w****g
  • 文档编号:4868775
  • 上传时间:2024-10-16
  • 格式:PPTX
  • 页数:44
  • 大小:1.30MB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    ObjectiveC20 程序设计
    资源描述:
    第第7章章 类类武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类使用点运算符访问属性使用点运算符访问属性7.3具有多个参数的方法具有多个参数的方法7.4合成存取器方法合成存取器方法7.2分离接口和实现文件分离接口和实现文件7.1局部变量局部变量7.5self关键字关键字7.6在方法中分配和返回对象在方法中分配和返回对象7.7武汉大学国际软件学院Objective-C 2.0程序设计3武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 现在,是时候将类的声明和定义放在单独的文件中了。如果正使用Xcode,可新建一个称为FractionTest的项目。在文件FractionTest.m中键入以下程序。代码清单7-1 主测试程序:FractionTest.m-#import“Fraction.h”int main(int argc,char*argv)autoreleasepoolFraction*myFraction=Fraction alloc init;/set fraction to 1/3myFraction setNumerator:1;myFraction setDenominator:3;/display the fractionNSLog(”The value of myFraction is:”);myFraction print;return 0;武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 注意,该文件未包含Fraction类的定义,然而,它确实导入了一个称为Fraction.h 的文件。通常,类的声明(interface部分)要放在它自己的名为class.h的文件中,而类的定义(implementation部分)通常放在相同名称的文件中,但扩展名为.m。所以把Fraction类的声明放到Fraction.h文件中,把Fraction类的定义放到Fraction.m文件中。要在Xcode中完成该工作,在File菜单中选择New File。在左侧窗口中选择Cocoa。武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 点击Next,键入Fraction.m作为文件名。选中Also Create Fraction.h框。该文件所在位置应该与FractionTest.m文件的文件夹相同。武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 点击Finish。Xcode在项目中添加了两个文件:Fraction.h和Fraction.m。在此我们不使用Cocoa,所以将Fraction.h中的#import 改为#import 武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 代码清单7-1 接口文件Fraction.h-/Fraction.h/FractionTest/Created by Steve Kochan on 7/5/08./Copyright 2008 _MyCompanyName_.All rights reserved.#import/The Fraction classinterface Fraction:NSObjectint numerator;int denominator;-(void)print;-(void)setNumerator:(int)n;-(void)setDenominator:(int)d;-(int)numerator;-(int)denominator;-(double)convertToNum;end武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 代码清单7-1 实现文件Fraction.m-/Fraction.m/FractionTest/Created by Steve Kochan on 7/5/08./Copyright 2008 _MyCompanyName_.All rights reserved.#import“Fraction.h”implementation Fraction-(void)printNSLog(”%i/%i”,numerator,denominator);-(void)setNumerator:(int)nnumerator=n;-(void)setDenominator:(int)ddenominator=d;武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件-(int)numeratorreturn numerator;-(int)denominatorreturn denominator;-(double)convertToNumif(denominator!=0)return(double)numerator/denominator;elsereturn NAN;end武汉大学国际软件学院Objective-C 2.0程序设计7.1 分离接口和实现文件分离接口和实现文件 注意,使用以下语句将接口文件导入到实现文件中:#import“Fraction.h”这样做的目的是,是编译器知道为Fraction类声明的类和方法,同时还能确保这两个文件的一致性。还要提醒一下,一般不能在实现部分重复声明类的实例变量,所以编译器需要从Fraction.h中包含的接口部分获取信息 需要注意的另一件事是:导入的文件要用一对引号括起来,而不是尖括号字符。双引号用于本地文件(指自己创建的文件),本地文件与系统文件相对,并且它们告诉编译器在哪里找到指定的文件。使用双引号,编译器一般会首先在当前目录寻找指定文件,然后再转到其他位置查找。还要注意,测试程序FractionTest.m包括接口文件Fraction.h,而不包括实现文件Fraction.m。现在,该程序分成了三个独立的文件。对于小程序例子而言,这似乎要花费很多工作,但是,着手处理较大的程序并和其他程序员共享类的声明时,这种实用性就会变得十分明显。编译运行该文件,输出为:The value of myFraction is:1/3武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类使用点运算符访问属性使用点运算符访问属性7.3具有多个参数的方法具有多个参数的方法7.4分离接口和实现文件分离接口和实现文件7.1局部变量局部变量7.5self关键字关键字7.6在方法中分配和返回对象在方法中分配和返回对象7.7合成存取器方法合成存取器方法7.2武汉大学国际软件学院Objective-C 2.0程序设计7.2 合成存取器方法 从Objective-C 2.0开始,可自动生成设置函数方法和获取函数方法(统称为存取器方法)。我们到目前位置都没有介绍如何实现,原因是知道如何自己编写这些方法非常重要。第一步是在接口部分中使用property指令标志属性。这些属性通常是实例变量。在Fraction类中,两个实例变量numerator和denominator都属于此类属性。下面是新的接口部分,其中添加了新的property指令。interface Fraction:NSObjectint numerator;int denominator;property int numerator,denominator;-(void)print;-(double)convertToNum;end武汉大学国际软件学院Objective-C 2.0程序设计7.2 合成存取器方法 注意,我们没有包括下列设置函数方法和获取函数方法的定义:numerator,denominator,setNumerator:和和setDenominator:。:。我们要让Objective-C 2.0编译器为我们自动生成这些方法。只需在实现部分中使用synthesize指令即可:#import“Fraction.h”implementation Fractionsynthesize numerator,denominator;-(void)printNSLog(”%i/%i”,numerator,denominator);-(double)convertToNumif(denominator!=0)return(double)numerator/denominator;elsereturn NAN;end武汉大学国际软件学院Objective-C 2.0程序设计7.2 合成存取器方法 下面这还内容告诉Objective-C编译器,为两个实例变量的每个生成一对设置函数方法和获取函数方法:synthesize numerator,denominator;通常如果有成为X的实例变量,那么在实现部分包括以下会导致编译器自动实现一个获取函数方法X和一个设置函数方法setX:synthesize x;武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类合成存取器方法合成存取器方法7.2具有多个参数的方法具有多个参数的方法7.4分离接口和实现文件分离接口和实现文件7.1局部变量局部变量7.5self关键字关键字7.6在方法中分配和返回对象在方法中分配和返回对象7.7使用点运算符访问属性使用点运算符访问属性7.3武汉大学国际软件学院Objective-C 2.0程序设计7.3 使用点运算符访问属性使用点运算符访问属性 Objective-C语言允许你使用非常简便的语法访问属性。要获得myFraction中存储的numerator的值,可使用一下语句:myFraction numerator这会向myFraction对象发送numerator消息,从而返回所需的值。从Objective-C 2.0开始,可以使用点运算符编写以下等价的表达式:myFraction.numerator 一般格式为:instance.property还可以使用类似的语法进行赋值instance.property=value这等价于编写一下表达式:instance setProperty:value武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类合成存取器方法合成存取器方法7.2使用点运算符访问属性使用点运算符访问属性7.3分离接口和实现文件分离接口和实现文件7.1局部变量局部变量7.5self关键字关键字7.6在方法中分配和返回对象在方法中分配和返回对象7.7具有多个参数的方法具有多个参数的方法7.4武汉大学国际软件学院Objective-C 2.0程序设计7.4 具有多个参数的方法具有多个参数的方法 如果有一个方法能够只用一条消息既可设置numerator同时又可设置denominator就太好了。通过列出每个连续的参数并用冒号将其连起来,就可以定义一个接受多参数的方法。用冒号链接的参数将成为这个方法名的一部分。例如:方法名addEntryWithName:andEmail:表示接受两个参数的方法,这两个参数可能是姓名和电子邮件地址。方法addEntryWithName:andEmail:andPhone:是接收以下3个参数的方法,一个姓名,一个电子邮件和一个电话号码。同时设置numerator和denominator的方法可以命名为setNumerator:andDenominator:,你可以采取以下形式:myFraction setNumerator:1 andDenominator:3;这种命名方法是首选方式,但是必须为方法指定更易阅读的名称。例如setTo:over:,通过将myFraction设置为1/3,比较这个名称和前面的名称:myFraction setTo:1 over:3;武汉大学国际软件学院Objective-C 2.0程序设计7.4 具有多个参数的方法具有多个参数的方法 代码请7-2 接口文件:Fraction.h-#import/Define the Fraction classinterface Fraction:NSObjectint numerator;int denominator;property int numerator,denominator;-(void)print;-(void)setTo:(int)n over:(int)d;-(double)convertToNum;end武汉大学国际软件学院Objective-C 2.0程序设计7.4 具有多个参数的方法具有多个参数的方法 代码清单7-2 实现文件:Fraction.m-#import“Fraction.h”implementation Fractionsynthesize numerator,denominator;-(void)printNSLog(”%i/%i”,numerator,denominator);-(double)convertToNumif(denominator!=0)return(double)numerator/denominator;elsereturn 1.0;-(void)setTo:(int)n over:(int)dnumerator=n;denominator=d;end新的setTo:over:方法仅接收两个整型参数,n和d,并把它们赋值给该分数对应的域武汉大学国际软件学院Objective-C 2.0程序设计7.4 具有多个参数的方法具有多个参数的方法 代码请7-2 测试文件:mian.m-#import“Fraction.h”int main(int argc,char*argv)autoreleasepoolFraction*aFraction=Fraction alloc init;aFraction setTo:100 over:200;aFraction print;aFraction setTo:1 over:3;aFraction print;return 0;输出:100/3001/3武汉大学国际软件学院Objective-C 2.0程序设计7.4.1 不带参数名的方法不带参数名的方法 创建方法名时,参数名实际上是可选的。例如,可以如下声明一个方法:-(int)set:(int)n:(int)d;注意,和先前的例子不同,这个方法的第二个参数没有名字。这个方法名为set:,两个冒号表示这个方法有两个参数,虽然没有全部命名。要调用set:方法,可以使用冒号作为参数分隔符:aFraction set:1:3;在编写新方法时,省略参数名不是一种好的编程风格,因为它使程序很难读懂并且很不直观,特别是当使用的方法参数特别重要时更是如此。武汉大学国际软件学院Objective-C 2.0程序设计7.4.2 关于分数的操作关于分数的操作 继续讨论上面提到的Fraction类。首先,编写一个方法,将一个分数与另一个分数相加,将一个方法命名为add:,并且把一个分数作为参数。这个新方法的声明如下:-(void)add:(Fraction*)f;注意参数f的声明:(Fraction*)f这条语句说明add:方法的参数类型是Fraction类,星号是必须的,所以声明:(Fraction)f是不正确的。你将把一个分数作为参数传递给add:方法。所以表达式:aFraction add:bFraction;将Fraction bFraction和Fraction aFraction相加。/add a Fraction to the receiver-(void)add:(Fraction*)f/To add two fractions:/a/b+c/d=(a*d)+(b*c)/(b*d)numerator=numerator*f.denominator+denominator*f.numerator;denominator=denominator*f.denominator;武汉大学国际软件学院Objective-C 2.0程序设计7.4.2 关于分数的操作关于分数的操作 假设将新add:方法的声明和定义添加到接口和实现文件中。代码清单7-3 测试文件:FractionTest.m-#import“Fraction.h”int main(int argc,char*argv)autoreleasepoolFraction*aFraction=Fraction alloc init;Fraction*bFraction=Fraction alloc init;/Set two fractions to 1/4 and 1/2 and add them togetheraFraction setTo:1 over:4;bFraction setTo:1 over:2;/Print the resultsaFraction print;NSLog(”+”);bFraction print;NSLog(”=”);aFraction add:bFraction;aFraction print;return 0;输出:1/4+1/2=6/8武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类合成存取器方法合成存取器方法7.2使用点运算符访问属性使用点运算符访问属性7.3分离接口和实现文件分离接口和实现文件7.1具有多个参数的方法具有多个参数的方法7.4self关键字关键字7.6在方法中分配和返回对象在方法中分配和返回对象7.7局部变量局部变量7.5武汉大学国际软件学院Objective-C 2.0程序设计7.5 局部变量局部变量 你也许注意到1/4和1/2相加的结果显示为6/8,而不是期望的3/4。所以继续练习如何编写有关分数运算的新方法。编写一个新的reduce方法,将分数相约到它的最简形式:-(void)reduceint u=numerator;int v=denominator;int temp;while(v!=0)temp=u%v;u=v;v=temp;numerator/=u;denominator/=u;武汉大学国际软件学院Objective-C 2.0程序设计7.5 局部变量局部变量 这个reduce方法中有一些新东西:它声明了三个整型变量u,v和temp。这些变量是局部变量,意思是它们的值只在reduce方法运行时才存在并且只能在定义它们的方法中访问。从这个意义上来说,它们类似于在main例程中定义的变量;这些变量对main来说是局部变量,可以在main例程中直接进行访问,其他的方法都不能访问main中的局部变量。局部变量没有默认的初始值,所以在使用前要先赋值。reduce程序中有三个局部变量在使用之前被赋值。和实例变量不同,这些局部变量不存在于内存中,也就是,当方法返回时,这些变量的值都消失了。每次调用方法,该方法中的局部变量都是用变量声明初始化一次。武汉大学国际软件学院Objective-C 2.0程序设计7.5.1 方法的参数方法的参数 方法的参数名也是局部变量。执行方法时,通过方法传递的任何参数都被复制到局部变量中。因为方法使用参数的副本,所以不能改变通过方法传递的原值。假设有个名为calculate的方法:-(void)calculate:(double)xx*=2;.假设使用一下消息表达式来调用它:myData calculate:ptVal;执行calculate方法时,ptVal变量所含的任何值都被复制到局部变量x。所以改变calculate中x的值,对ptVal的值没有影响,只影响x变量的数据副本。如果参数是对象,可以更改其中的实例变量的值。武汉大学国际软件学院Objective-C 2.0程序设计7.5.2 static关键字关键字 在变量声明前加上关键字static,可以使局部变量保留多次调用一个方法所得的值。例如:static int hitCount=0;声明证实hitCount是一个静态变量。和其他常见局部变量不同,静态变量的初始值是0,所以前面显示的初始化是多余的。此外,它们只在程序开始执行时初始化一次,并且在多次调用方法时保存这些数值。-(void)showPagestatic int pageCount=0;.+pageCount;.静态变量用于记录该方法的调用次数。只在程序开始时局部静态变量设置为0,并且在连续调用showPage方法时获得新值。武汉大学国际软件学院Objective-C 2.0程序设计7.5.2 static关键字关键字 注意,将pageCount设置为局部静态变量和实例变量之间的区别。对于前一种情况,pageCount能记录调用showPage方法的所有对象打印页码的数目。对后一种情况,pageCount变量可以计算每个对象打印的页码数目,因为每个对象都有自己的pageCount副本。记住只能在定义静态和局部变量的方法中访问这些变量。所以即使静态变量pageCount,也只能在showPage函数中访问。可以将变量的声明移到所有方法声明的外部,这样所有的方法都可以访问它们。如:#import“Printer.h”static int pageCount;implementation Printer.end 返回关于分数的讨论,将reduce方法的代码结合到实现文件Fraction.m中。不要忘了在接口文件Fraction.h中声明reduce方法。武汉大学国际软件学院Objective-C 2.0程序设计7.5.2 static关键字关键字 代码清单7-4 测试文件FractionTest.m-#import“Fraction.h”int main(int argc,char*argv)autoreleasepoolFraction*aFraction=Fraction alloc init;Fraction*bFraction=Fraction alloc init;aFraction setTo:1 over:4;/set 1st fraction to 1/4bFraction setTo:1 over:2;/set 2nd fraction to 1/2aFraction print;NSLog(”+”);bFraction print;NSLog(”=”);aFraction add:bFraction;/reduce the result of the addition and print the resultaFraction reduce;aFraction print;return 0;输出:1/4+1/2=3/4武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类合成存取器方法合成存取器方法7.2使用点运算符访问属性使用点运算符访问属性7.3分离接口和实现文件分离接口和实现文件7.1具有多个参数的方法具有多个参数的方法7.4局部变量局部变量7.5在方法中分配和返回对象在方法中分配和返回对象7.7self关键字关键字7.6武汉大学国际软件学院Objective-C 2.0程序设计7.6 self关键字关键字 在代码清单7-4中,我们决定在add:方法之外约简分数,还可以在add:中进行约简。然而,如何确定使用reduce方法约简的分数?我们知道如何通过变量名直接确定方法中的实力变量,但是不知道如何直接确定消息的接受者。关键字self用来指明对象是当前方法的接受者。如果在add:方法中编写:self reduce;就可以对Fraction应用reduce方法,它正是你希望的add:方法接受者。现在在add:方法中使用它。下面是修改后的结果。-(void)add:(Fraction*)f/To add two fractions:/a/b+c/d=(a*d)+(b*c)/(b*d)numerator=(numerator*f denominator)+(denominator*f numerator);denominator=denominator*f denominator;self reduce;武汉大学国际软件学院Objective-C 2.0程序设计第第7章章 类类合成存取器方法合成存取器方法7.2使用点运算符访问属性使用点运算符访问属性7.3分离接口和实现文件分离接口和实现文件7.1具有多个参数的方法具有多个参数的方法7.4局部变量局部变量7.5self关键字关键字7.6在方法中分配和返回对象在方法中分配和返回对象7.7武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 我们注意到add:方法改变了接受该消息的对象值。创建新版本的add:函数,这个方法创建了一个新的分数来存储相加的结果。在这种情况下,需要向消息的发送者返回新的Fraction。下面是add:的定义:-(Fraction*)add:(Fraction*)f/To add two fractions:/a/b+c/d=(a*d)+(b*c)/(b*d)/result will store the result of the additionFraction*result=Fraction alloc init;int resultNum,resultDenom;resultNum=numerator*f.denominator+denominator*f.numerator;resultDenom=denominator*f.denominator;result setTo:resultNum over:resultDenom;result reduce;return result;武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 方法的第一行是:-(Fraction*)add:(Fraction*)f;这一行说明add:方法将返回一个名为Fraction对象,并且说明它还是用一个Fraction作为参数。这个参数将与消息的接受者相加。消息的接受者同样是Fraction。和以前一样执行完加法运算后,将产生的分子和分母赋值给局部变量,然后使用一下消息表达式设置result的值:result setTo:resultNum over:resultDenom;注意在add:方法中分配给Fraction result的空间被返回,并且没有被系统释放。不能从add:方法中释放,因为add:方法的调用者需要它。因此这个方法的使用者知道返回的对象是一个新变量,并将被随后释放。代码清单7-5测试了新方法add:武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 代码清单7-5 测试文件main.m-#import“Fraction.h”int main(int argc,char*argv)autoreleasepoolFraction*aFraction=Fraction alloc init;Fraction*bFraction=Fraction alloc init;Fraction*resultFraction;aFraction setTo:1 over:4;/set 1st fraction to 1/4bFraction setTo:1 over:2;/set 2nd fraction to 1/2aFraction print;NSLog(”+”);bFraction print;NSLog(”=”);武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象resultFaction=aFraction add:bFraction;resultFraction print;/This time give the result directly to print/memory leakage here!aFraction add:bFraction print;return 0;输出:1/4+1/2=3/43/4武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 一下代码:resultFraction=aFraction add:bFraction;resultFraction print;首先发送add:消息到aFraction对象,同时将bFraction作为它的参数。该方法返回的结果存储到resultFraction中,然后通过向它发送一个print消息,显示结果。注意虽然你没有在main例程中为resultFraction分配空间,但是在程序的末尾一定要将resultFraction释放。它是由add:方法分配空间的,但是由程序员负责清除。消息表达式:aFraction add:bFraction print;看起来很不错,但是它实际上存在一个问题。因为你使用add:方法返回的Fraction类的对象,你没有办法释放add:方法创建的Fraction类对象。这是一个内存泄露的例子。如果程序中有很多这样的嵌套消息,最终这些分数的存储空间就会累加。问题的一个解决方案是将print方法返回给它的接受者,然后可以将它释放。但这有点兜圈子。一个更好的解决方案是将嵌套的消息分成两个单独的消息,和在程序中以前做的一样。武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 顺便,可以在add:方法中避免使用临时变量resultNum和resultDenom。相反,单挑消息调用 result setTo:numerator*f.denominator+denominator*f.numerator over:denominator*f.denominator;将实现这个目的。并不推荐编写如此简明的代码。我们介绍本章最后一个分数。例如,考虑计算一下内容:符号是总和的缩写。代码清单7-6提示你提供不同的n值,并执行相应的计算。武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 代码清单7-6 FractionTest.m-#import“Fraction.h”int main(int argc,char*argv)autoreleasepoolFraction*aFraction=Fraction alloc init;Fraction*sum=Fraction alloc init,*sum2;int i,n,pow2;sum setTo:0 over:1;/set 1st fraction to 0NSLog(”Enter your value for n:”);scanf(“%i”,&n);pow2=2;武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象for(i=1;i=n;+i)aFraction setTo:1 over:pow2;sum2=sum add:aFraction;sum=sum2;pow2*=2;NSLog(”After%i iterations,the sum is%g”,n,sum convertToNum);return 0;输出:Enter your value for n:5After 5 iterations,the sum is 0.96875输出:Enter your value for n:10After 10 iterations,the sum is 0.999023输出:Enter your value for n:15After 15 iterations,the sum is 0.999969武汉大学国际软件学院Objective-C 2.0程序设计7.7 在方法中分配和返回对象在方法中分配和返回对象 现在,你已经开发了处理分数的一个小方法库。下面是接口文件,它是完整地列出的,所以可以看到该类实现的所有方法:#import/Define the Fraction classinterface Fraction:NSObjectint numerator;int denominator;property int numerator,denominator;-(void)print;-(double)convertToNum;-(Fraction*)add:(Fraction*)f;-(void)reduce;end
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:ObjectiveC20程序设计类.pptx
    链接地址:https://www.zixin.com.cn/doc/4868775.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork