Object-C 经典入门教程

合集下载

Object-C——基础语法

Object-C——基础语法

Object-C——基础语法Object-C是在C语⾔的基础上加上了⾯向对象的部分,更好的来开发程序。

⼀、关键字1、基本上关键字都以@开头2、常见关键字如下:@interface、@implementation、@end@public、@protected、@private、@selector@try、@catch、@throw、@finally@protocol、@optional、@required、@class@property、@synthesize、@dynamicself、super、id、_cmd、__block、__strong、__weak、3、字符串也以@开头如:@“hello”⼆、import#import的⽤途:1、跟#include⼀样,拷贝⽂件的内容2、可以⾃动防⽌⽂件的内容被重复拷贝三、 Foundation1、开发iOS程序必备的框架,2、包含很多的API3、此框架包含了很多头⽂件头⽂件的引⽤#import <Foundation/Foundation.h>四、NSLog1、NSLog⽤来接受OC字符串座位参数2、NSLog输出后会⾃动换⾏3、使⽤NSLog 需要#import<Foundation/Foundation.h>五、BoolBool类型的变量有2种取值:YES、NO举例1#import <Foundation/Foundation.h>234 BOOL test(BOOL mybool)5 {6return NO;7 }89int main()10 {11 BOOL b = YES;1213 BOOL b2 = NO;1415 BOOL b3 = 1; // YES1617 BOOL b4 = 0; // NO181920 NSLog(@"%d", test(YES));21return0;22 }六、编译链接⽅法1、编写OC源⽂件:.m、.c2、在终端种使⽤以下过程:①编译:cc -c xxx.m xxx.c②链接:cc xxx.o xxx.o -framework Foundation(只有⽤到了Foundation框架才需要加上-framework Foundation)③运⾏:./a.out。

object-c实现异步的方法

object-c实现异步的方法

object-c实现异步的方法
在Objective-C中,可以使用GCD(Grand Central Dispatch)来实现异步方法。

GCD是一个底层的多线程处理框架,可以用于在后台执行任务,而不会阻塞主线程。

下面是一个使用GCD实现异步方法的示例代码:
```objective-c
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// 在后台执行异步任务
// 这里可以放置需要异步执行的代码
// 例如网络请求、耗时计算等
dispatch_async(dispatch_get_main_queue(), ^{
// 在主线程更新UI或执行其他需要在主线程执行的操作
// 这里可以放置需要在主线程执行的代码
// 例如更新UI、处理数据等
});
});
```
在上述代码中,首先创建了一个全局并发队列(`dispatch_get_global_queue`)用于执行后台任务。

然后使用`dispatch_async`方法将需要异步执行的代码块放入队列中。

在后台执行的代码块中,可以进行一些耗时的操作,例如网络请求或者计算。

如果需要在后台执行的代码执行完毕后更新UI或执行其他需要在主线程执行的操作,可以使用`dispatch_async`方法将相关代码块放入主队列(`dispatch_get_main_queue`)中,以确保在主线程中执行。

需要注意的是,在异步方法中更新UI时,要确保在主线程上执行,否则可能会引发线程安全问题。

object-c初学者中文教程

object-c初学者中文教程
以下是两个例子: //string1 将被自动释放 NSString* string1 = [NSString string]; //必须在用完后手工释放 NSString* string2 = [[NSString alloc] init]; [string2 release]; 在这里,你可以认为自动释放对象会在当前函数结束的时候被自动释放。 关于内存管理要学的东西很多,但是我们先了解一下其他的概念,这样我们会有更 多的认识。
创建对象
创建对象有两种主要的办法。第一个是之前你看到的: NSString* myString = [NSString string]; 这是一种更加方便自然的方式。通过这种方法,你创建了一个自 动 释 放 (autoreleased)的对象,这一点我们会在后面看到更多的细节。尽管如此,在许多 地方,你可能需要通过手工创建的方式来创建一个对象,如下: NSString* myString = [[NSString alloc] init]; 这是一个嵌套的方法调用。第一个是NSString类本身的alloc方法调用。这是一 个相对低层的调用,它的作用是分配内存及实例化一个对象。 第二个是调用新创建对象的init方法。init方法通常做对象的初始化设置工作, 比如创建实例变量。作为一个类的使用者,你无法知道这些方法的实现细节。 在某些情况下,你可以使用init方法的另外一种版本,这些版本带有输入参数: NSNumber* value = [[NSNumber alloc] initWithFloat:1.0];
在任何情况下,在方括号中代码都意味着你是在给一个对象或者一个类型发送一个 消息(即一个方法调用)。
点操作符
在Mac OS X 10.5中,Objective-C 2.0新增了点操作符的设置器(setter) 和获取器(getter):

学习Objective-C入门教程(全)

学习Objective-C入门教程(全)

学习Objective-C入门教程1,前言相信iPhone不久就要在国内发布了,和我们在国内可以通过正规渠道买得到的iPodTouch一样,iPhone也是一个激动人心的产品。

iPhone发布的同时,基于iPhone的程序也像雨后春笋一样在iTunes里面冒出来。

你将来也许会考虑买一个iPhone,体验一下苹果的富有创意的种种应用;你也许会考虑向iTunes的社区的全世界的人们展示一下你非凡的创意,当然也可以通过你的创意得到一些意想不到的收益。

OK,你也许迫不及待的准备开发了。

但是先等一下,让我们回忆一下最初的电影是怎么拍摄的。

这个很重要,因为和iPhone的开发比较类似。

在最初因为器材比较原始,所以拍摄电影需要很高的技术,那个时候的电影的导演基本上是可以熟练操作摄影器材的人。

随着器材的完善,使用也简单起来。

于是器材的使用不是决定一个电影的质量的唯一的因素,取而代之的是故事或者说电影的创意。

iPhone的开发也是这样。

当然从入门到掌握的过程来说任何事情都是开始比较难,随着掌握的程度的加深,你将会觉得开发iPhone应用程序是一件简单而且轻松的事情,到了那个时候,你的主要的制胜武器就不是开发技术,而是你的创意了。

对于你来说,我在这里写的东西都是有关“摄影器材”也就是介绍如何使用iPhone的平台来开发应用程序。

iPhone的开发语言是Objective-C。

Objective-C是进行iPhone开发的主要语言,掌握了Objective-C的基本语法以及数据结构之后,你需要熟悉一下iPhone的SDK。

笔者很难做到在一篇文章里面把所有的东西都介绍清楚,所以笔者打算分成两个主题,一个是Objective-C,一个是iPhone开发。

本系列将侧重于Objective-C。

当然,任何一种开发语言都无法脱离于运行环境,Objective-C也不例外。

所以在本系列当中也会穿插的介绍一些SDK里面的一些特性,主要是数据结构方面,比如说NSString,NSArray等等。

object-c字符串操作

object-c字符串操作

object-c字符串操作Objective-C 中核⼼处理字符串的类是 NSString 与 NSMutableString ,这两个类最⼤的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除⾮重新给这个字符串赋值。

⽽NSMutableString 创建赋值以后可以动态在该字符串上更改内容与长度。

1.创建经典的NSString字符串NSString 与 char* 最⼤的区别就是 NSString是⼀个objective对象,⽽char* 是⼀个字节数组。

@+ ” 字符串 ” 这个符号为objective-c NSString 字符串常量的标准⽤法,char* 创建的时候⽆需添加@- (void)viewDidLoad{[super viewDidLoad];//经典的字符串赋值NSString *str0 = @"我是⾬松MOMO";//字符串格式化合并分别包括//NSString*类型 int类型 char*类型NSString *str1 = [NSString stringWithFormat:@"我的名字:%@ 我的年龄:%d 我的邮箱:%s",@"⾬松MOMO", 25,"xuanyusong@"];//字符串赋值参数中只可以写⼀个字符串和第⼀种很像NSString *str2 = [NSString stringWithString:@"我是字符串"];//字符串转换为utf-8格式参数为char*类型NSString *str3 = [NSString stringWithUTF8String:"字符串转换utf-8格式"];//字符串合并int i = 100;char*c = "xuanyusong";NSString *temp = @"我是临时字符串";//在字符串temp的基础继续添加 int i 与 char* c 组成⼀个新的字符串NSString *str4 = [temp stringByAppendingFormat:@"整型: %d 字符型:%s",i,c];//在字符串temp的基础继续添加temp 并组成⼀个新的字符串NSString *str5 = [temp stringByAppendingString:temp];//字符串输出NSLog(@"str0 = %@", str0);NSLog(@"str1 = %@", str1);NSLog(@"str2 = %@", str2);NSLog(@"str3 = %@", str3);NSLog(@"str4 = %@", str4);NSLog(@"str5 = %@", str5);}2.字符串的遍历每⼀个字符串其实是由若⼲个char字符组成,字符串的遍历实际上就是将字符串中的每⼀个字符提取出来。

Objective-C基础教程(入门教程)

Objective-C基础教程(入门教程)

目录开始 (1)下载这篇教程 (1)设定环境 (1)前言 (1)编译hello world (2)创建classes (2)@interface (2)@implementation (2)把他们组合在一起 (2)详细说明 (1)多个参数 (1)构造子(Constructors) (2)存取权限 (2)Class level access (2)异常(Exceptions) (4)继承、多态(Inheritance, Polymorphism)以及其他实体导向功能 (8)Id类型 (8)继承(Inheritance) (12)动态识别(Dynamic types) (15)Categories (17)Posing (20)Protocols (21)内存管理 (26)Retain and Release(保留与释放) (26)Dealloc (27)Autorelease Pool (31)Foundation framework classes (33)NSArray (33)NSDictionary (35)优点与缺点 (37)优点 (37)缺点 (37)更多资讯 (37)开始下载这篇教程所有这篇初学者指南的原始代码都可以在objc.tar.gz 下载。

这篇教程中的许多反例都是由Steve Kochan 在Programming in Objective-C. 一书中撰写。

如果你想得到更多详细资料及范例,请直接参考该书。

本网站所刊登的所有范例都经过他的允许,所以请勿复制转载。

设定环境Linux/FreeBSD:安装GNUStep为了编译GNUstep的应用程序,必须先执行位于/usr/GNUstep/System/Makefiles/GNUstep.sh的GNUstep.sh这个文件。

这个路径取决于你的系统环境,有些是在/usr,some /usr/lib,有些是/usr/local。

如果你的shell 是以csh/tcsh为基础的shell,则应该改用GNUStep.csh。

c语言调用objectc方法

c语言调用objectc方法

c语言调用objectc方法摘要:1.C语言与Objective-C的关系2.调用Objective-C方法的原理3.调用Objective-C方法的步骤4.示例:创建一个C语言模块调用Objective-C方法5.注意事项正文:在过去,C语言和Objective-C是两个独立的编程语言。

C语言是一种静态类型的编程语言,广泛应用于操作系统、嵌入式系统和游戏开发等领域。

而Objective-C是一种面向对象的编程语言,主要用于苹果平台的开发。

自从苹果公司推出Swift语言后,Objective-C在苹果平台上的地位逐渐被Swift取代。

然而,Objective-C依然在很多项目中发挥着重要作用,因此了解如何在C语言中调用Objective-C方法是非常有意义的。

调用Objective-C方法的原理:当我们在C语言中调用Objective-C方法时,实际上是通过C语言调用Objective-C动态库(.dylib)实现的。

Objective-C动态库包含了Objective-C类的定义、方法实现和一些辅助功能。

在编译过程中,Objective-C编译器会将Objective-C代码转换成C语言代码,并与C语言代码一起编译。

因此,C语言程序可以顺利地调用Objective-C方法。

调用Objective-C方法的步骤:1.创建一个Objective-C动态库:首先,我们需要为Objective-C类创建一个动态库。

这可以通过Xcode或其他IDE来实现。

在创建动态库时,确保设置对了动态库的名称和导入路径。

2.创建C语言模块:在C语言项目中,我们需要创建一个模块来调用Objective-C动态库。

这可以通过以下方式实现:```#import <Foundation/Foundation.h>```这样,我们就可以在C语言中使用Objective-C的框架和类了。

3.调用Objective-C方法:在C语言模块中,我们可以通过以下方式调用Objective-C方法:```@interface MyClass : NSObject- (void)myMethod;@end@implementation MyClass- (void)myMethod {NSLog(@"Hello from Objective-C!");}@endint main(int argc, const char * argv[]) {@autoreleasepool {MyClass *objcClass = (MyClass*)objc_getClass("MyClass");SEL sel = [objcClassmethodForSelector:@selector(myMethod)];IMP imp = [objcClassimp_implementationWithBlock:^(id obj) {[obj performSelector:sel withObject:nil];}];((void (*)(id, SEL))imp)(objcClass, sel);}return 0;}```在上面的示例中,我们创建了一个名为MyClass的Objective-C类,并定义了一个名为myMethod的方法。

学习Objective-C入门教程(全)

学习Objective-C入门教程(全)

学习Objective-C入门教程1,前言相信iPhone不久就要在国发布了,和我们在国可以通过正规渠道买得到的iPodTouch 一样,iPhone也是一个激动人心的产品。

iPhone发布的同时,基于iPhone的程序也像雨后春笋一样在iTunes里面冒出来。

你将来也许会考虑买一个iPhone,体验一下苹果的富有创意的种种应用;你也许会考虑向iTunes的社区的全世界的人们展示一下你非凡的创意,当然也可以通过你的创意得到一些意想不到的收益。

OK,你也许迫不及待的准备开发了。

但是先等一下,让我们回忆一下最初的电影是怎么拍摄的。

这个很重要,因为和iPhone的开发比较类似。

在最初因为器材比较原始,所以拍摄电影需要很高的技术,那个时候的电影的导演基本上是可以熟练操作摄影器材的人。

随着器材的完善,使用也简单起来。

于是器材的使用不是决定一个电影的质量的唯一的因素,取而代之的是故事或者说电影的创意。

iPhone的开发也是这样。

当然从入门到掌握的过程来说任何事情都是开始比较难,随着掌握的程度的加深,你将会觉得开发iPhone应用程序是一件简单而且轻松的事情,到了那个时候,你的主要的制胜武器就不是开发技术,而是你的创意了。

对于你来说,我在这里写的东西都是有关“摄影器材”也就是介绍如何使用iPhone的平台来开发应用程序。

iPhone的开发语言是Objective-C。

Objective-C是进行iPhone开发的主要语言,掌握了Objective-C的基本语法以及数据结构之后,你需要熟悉一下iPhone的SDK。

笔者很难做到在一篇文章里面把所有的东西都介绍清楚,所以笔者打算分成两个主题,一个是Objective-C,一个是iPhone开发。

本系列将侧重于Objective-C。

当然,任何一种开发语言都无法脱离于运行环境,Objective-C也不例外。

所以在本系列当中也会穿插的介绍一些SDK里面的一些特性,主要是数据结构方面,比如说NSString,NSArray等等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Object-C 入门教程分类:Sip&amp;asterisk2009-05-04 16:34 16409人阅读评论(2) 收藏举报大纲o开始吧下载这篇教学o设定环境o前言o编译 hello worldo创建 Classes@interfaceo@implementationo把它们凑在一起o详细说明...多重参数o建构子(Constructors)o访问权限o Class level accesso异常情况(Exceptions)处理o继承、多型(Inheritance, Polymorphism)以及其他面向对象功能id 型别o继承(Inheritance)o动态识别(Dynamic types)o Categorieso Posingo Protocolso内存管理Retain and Release(保留与释放)o Dealloco Autorelease Poolo Foundation Framework ClassesNSArrayo NSDictionary∙优点与缺点∙更多信息开始吧下载这篇教学▪所有这篇初学者指南的原始码都可以由objc.tar.gz下载。

这篇教学中的许多范例都是由 Steve Kochan 在Programming in Objective-C. 一书中撰写。

如果你想得到更多详细信息及范例,请直接参考该书。

这个网站上登载的所有范例皆经过他的允许,所以请勿复制转载。

设定环境▪Linux/FreeBSD: 安装GNUStep为了编译 GNUstep应用程序,必须先执行位于/usr/GNUstep/System/Makefiles/GNUstep.sh 的GNUstep.sh 这个档案。

这个路径取决于你的系统环境,有些是在 /usr, some /usr/lib,有些是/usr/local。

如果你的 shell 是以 csh/tcsh 为基础的 shell,则应该改用 GNUStep.csh。

建议把这个指令放在 .bashrc或 .cshrc 中。

▪Mac OS X: 安装XCode▪Windows NT 5.X: 安装cygwin或mingw,然后安装GNUStep前言▪这篇教学假设你已经有一些基本的 C 语言知识,包括 C 数据型别、什么是函式、什么是回传值、关于指针的知识以及基本的 C 语言内存管理。

如果您没有这些背景知识,我非常建议你读一读 K&R 的书:The C Programming Language(译注:台湾出版书名为 C 程序语言第二版)这是 C 语言的设计者所写的书。

▪Objective-C,是 C 的衍生语言,继承了所有 C 语言的特性。

是有一些例外,但是它们不是继承于 C 的语言特性本身。

▪nil:在 C/C++ 你或许曾使用过 NULL,而在 Objective-C中则是 nil。

不同之处是你可以传递讯息给 nil(例如 [nilmessage];),这是完全合法的,然而你却不能对 NULL 如法炮制。

▪BOOL:C 没有正式的布尔型别,而在 Objective-C 中也不是「真的」有。

它是包含在 Foundation classes(基本类别库)中(即 import NSObject.h;nil 也是包括在这个头文件内)。

BOOL 在 Objective-C 中有两种型态:YES 或 NO,而不是 TRUE或 FALSE。

▪#import vs #include:就如同你在 hello world 范例中看到的,我们使用了#import。

#import 由 gcc 编译程序支援。

我并不建议使用 #include,#import基本上跟 .h 档头尾的#ifndef #define #endif 相同。

许多程序员们都同意,使用这些东西这是十分愚蠢的。

无论如何,使用 #import 就对了。

这样不但可以避免麻烦,而且万一有一天 gcc 把它拿掉了,将会有足够的 Objective-C 程序员可以坚持保留它或是将它放回来。

偷偷告诉你,Apple 在它们官方的程序代码中也使用了#import。

所以万一有一天这种事真的发生,不难预料 Apple 将会提供一个支持 #import 的 gcc 分支版本。

▪在 Objective-C 中, method 及 message 这两个字是可以互换的。

不过messages 拥有特别的特性,一个 message 可以动态的转送给另一个对象。

在Objective-C 中,呼叫对象上的一个讯息并不一定表示对象真的会实作这个讯息,而是对象知道如何以某种方式去实作它,或是转送给知道如何实作的对象。

编译 hello world▪hello.m▪#import <stdio.h>▪▪int main( int argc, const char *argv[] ) {▪ printf( "hello world/n" );▪ return 0;}∙o▪输出hello world∙o▪在 Objective-C 中使用 #import 代替 #include▪Objective-C 的预设扩展名是 .m创建 classes@interface▪基于 "Programming in Objective-C," Copyright © 2004 bySams Publishing一书中的范例,并经过允许而刊载。

▪Fraction.h▪#import <Foundation/NSObject.h>▪▪@interface Fraction: NSObject {▪ int numerator;▪ int denominator;▪}▪▪-(void) print;▪-(void) setNumerator: (int) d;▪-(void) setDenominator: (int) d;▪-(int) numerator;▪-(int) denominator;▪@end∙o▪NSObject:NeXTStep Object 的缩写。

因为它已经改名为OpenStep,所以这在今天已经不是那么有意义了。

▪继承(inheritance)以 Class: Parent 表示,就像上面的Fraction: NSObject。

▪夹在 @interface Class: Parent { .... } 中的称为instance variables。

▪没有设定访问权限(protected, public, private)时,预设的访问权限为protected。

设定权限的方式将在稍后说明。

▪Instance methods 跟在成员变数(即 instancevariables)后。

格式为:scope (returnType) methodName:(parameter1Type) parameter1Name;scope 有class 或instance 两种。

instance methods 以 -开头,classlevel methods 以 + 开头。

▪Interface 以一个 @end 作为结束。

@implementation▪基于 "Programming in Objective-C," Copyright © 2004 bySams Publishing一书中的范例,并经过允许而刊载。

▪Fraction.m▪#import "Fraction.h"▪#import <stdio.h>▪▪@implementation Fraction▪-(void) print {▪ printf( "%i/%i", numerator, denominator );▪}▪▪-(void) setNumerator: (int) n {▪ numerator = n;▪}▪▪-(void) setDenominator: (int) d {▪ denominator = d;▪}▪▪-(int) denominator {▪ return denominator;▪}▪▪-(int) numerator {▪ return numerator;▪}@endo▪Implementation 以 @implementation ClassName 开始,以@end 结束。

▪Implement 定义好的 methods 的方式,跟在 interface 中宣告时很近似。

把它们凑在一起▪基于 "Programming in Objective-C," Copyright © 2004 bySams Publishing一书中的范例,并经过允许而刊载。

▪main.m▪#import <stdio.h>▪#import "Fraction.h"▪▪int main( int argc, const char *argv[] ) {▪ // create a new instance▪ Fraction *frac = [[Fraction alloc] init];▪▪ // set the values▪ [frac setNumerator: 1];▪ [frac setDenominator: 3];▪▪ // print it▪ printf( "The fraction is: " );▪ [frac print];▪ printf( "/n" );▪▪ // free memory▪ [frac release];▪▪ return 0;}∙o▪outputThe fraction is: 1/3∙o▪Fraction *frac = [[Fraction alloc] init];这行程序代码中有很多重要的东西。

▪在 Objective-C 中呼叫 methods 的方法是[object method],就像 C++的 object->method()。

▪Objective-C 没有 value 型别。

所以没有像 C++ 的Fraction frac; frac.print(); 这类的东西。

在Objective-C 中完全使用指针来处理对象。

▪这行程序代码实际上做了两件事: [Fraction alloc]呼叫了 Fraction class 的 alloc method。

这就像malloc 内存,这个动作也做了一样的事情。

相关文档
最新文档