Object-C 2.0学习笔记(上)

1.引言

1.1 2007苹果公司发布Object-C2.0。Object-C是C的扩展。

1.2 书本内容组织方式:第一部分:1-13 语言基础,第二部分:14-19 构成Foundation框架的种类丰富的预定义,第三部分:20-21 介绍Cocoa和Cocoa Touch框架和用ios SDK开发简单IOS应用。

框架是一组从逻辑上组合在一起的类的例程,它们使开发程序变得更加容易。

2.object-c编程

//第一个IOS程序
#import <Foundtation/Foundation.h>
int main(int argc, const char * argv[]){
    @autoreleasepool{//自动释放池
        NSLog(@"Programming is fun!");//调用NSLog函数并传入参数
        //无@指C类型的字符串常量,有@指NSString字符串对象
    }
    return 0;
}

object-c源文件用.m扩展名

xcode自带静态代码分析器

还可以用unix shell编译oc源码

oc区分大小写

oc 注释同java

oc语句以分号;结束

oc返回值0表示正常结束,任何非0值通常表示出现问题

换行符\n

//显示变量值
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]){
    @autoreleasepool{
        int sum;
        sum = 50 + 25;
        NSLog(@"The sum is :%i", sum);
    }
    return 0;
}
//显示多变量值
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]){
    @autoreleasepool{
        int value1,value2,sum;
        value1 = 50; 
        value2 = 25;
        sum = value1 + value2;
        NSLog(@"the sum of %i and %i is %i", value1,value2,sum);    
    }
    return 0;
}


3.类、对象和方法

//处理分数的OC类
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]){
    @autoreleasepool {
        int numerator = 1;
        int denominator = 3;
        NSLog(@"The fraction is %i/%i", numerator, denominator);
    }
    return 0;

}
//处理分数-类版本
#import <Foundation/Foundation.h>
/*interface部分*/
@interface Fraction:NSObject
-(void) print;
-(void) setNumerator:(int) n;
-(void) setDenominator:(int) d;
@end

/*implementation部分*/
@implementation Fraction{
    int numerator;
    int denominator;
}
-(void) print{
    NSLog(@"%i/%i",numerator, denominator);
}
-(void) setNumerator:(int) n {
    numerator = n;
}
-(void) setDenominator:(int) d {
    denominator = d;
}
@end

/*program部分*/
int main(int argc, char * argv[]){
 @autoreleasepool{
     Fraction *myFraction;
     //创建一个分数实例
     myFraction = [Fraction alloc];
     myFraction = [myFraction init];
     //设置分数为1/3
     [myFraction setNumerator:1];
     [myFraction setDenominator:3];
     //使用打印方法显示分数
     NSLog(@"The value of myFraction is :");
     [myFraction print];     
 }
 return 0;
}

/*******************分析*********************/
程序在逻辑上分为三部分:
@interface部分:用于描述类和类的方法
@implementation部分:用于描述数据(类对象的实例变量存储的数据),并实现在接口中声明方法的实际代码
program部分:实现了程序的预期目的
注:也可以在interface(接口)部分为类声明实例变量 

@interface部分:

类名以大写字母开头

@interface NewClassName:ParentClassName
    propertyAndMethodDeclaractions;
@end
例:
@interface Fraction:NSObject
-(void) print;
-(void) setNumber:(int) n;
-(void) setDenominator:(int) d;
@end

注:新类的名称为Fraction,其父类为NSObject,NSObject类在文件NSObject.h中定义,导入Foundation.h文件时会在程序中自动包括这个类。

开头负号通知OC编译器,该方法是一个实例方法。正号表示类方法,类方法是对类本身执行某些操作的方法,如创建类的新实例。
实例方法能够对类的实例执行一些操作,如设置值,检索值,显示值。
返回值:返回类型放入开头的负号或正号之后的圆括号

方法的参数:如:
-(void)setNumerator:(int) n;
-(void)setDenominator:(int) d;
方法名以冒号结束表示该方法有带参数,无冒号时表示没有参数。

@implementation部分:

包含声明在@interface部分的方法的实际代码,且要指定存储对象中的数据类型。

@implementation NewClassName{
    memberDeclarations;//指定了哪种类型的数据要存入Fraction中
}
methodDefinitions;
@end

注:NewClassName表示名称与@interface部分的名称相同。可以在父的名称之后使用冒号,如在@interface部分使用冒号一样:
@implementation Fraction:NSObject
但它是可选的。
这部分声明的成员为实例变量。每次创建新对象时将同时创建一组新的实例变量,而且是唯一的一组。如果有两个Fraction,一个是FractionA,另一个是FractionB,那么每一个都将有自己的一组实例变量。
@implementation部分中的methodDefinitions部分包含在@interface部分指定的每个方法的代码中。

@program部分:包含解决特定问题的代码,可以跨越多个文件。

如果向某个类发送alloc消息便获取该类的新实例。

简写形式:通常把创建和初始化直接合并到声明行:
Fraction *myFraction = [[Fraction alloc] init];

Xcode4.2后版本,自动引用计数ARC(Automatic Reference Counting)的机制可以依靠系统自动释放内存,默认开启ARC。

//使用多个分数
#import <Foundation/Foundation.h>
@interface Fraction:NSObject
-(void)print;
-(void)setNumerator:(int) n;
-(void)setDenominator:(int) d;
@end
@implementation Fraction{
int numerator;
int denominator;
}
-(void)print{
NSLog(@"%i/%i",numerator,denominator);
}
-(void)setNumerator:(int) n{
numerator = n;
}
-(void)setDenominator:(int)d{
denominator = d;
}
@end

int main(int argc, char *argv[]){
    @autoreleasepool{
        Fraction *frac1 = [[Fraction alloc] init];
        Fraction *frac2 = [[Fraction alloc] init];        
    }
    //设置第一个分数2/3
    [frac1 setNumerator:2];
    [frac1 setNumerator:3];
    
    //设置第一个分数3/7
    [frac1 setNumerator:3];
    [frac1 setNumerator:7];
    
    //显示分数
    NSLog(@"First fraction:");
    [frac1 print];
    NSLog(@"Second fraction:");
    [frac2 print];           
    }
    return 0;
}


4.数据类型和表达式

//基本数据类型
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]){
    @autoreleasepool{
        int integerVar = 100;
        float floatVar = 331.79;
        double doubleVar = 8.33e+11;
        char charVar = 'u';
        
        NSLog(@"integerVar = %i", integerVar);
        NSLog(@"floatVar = %f", floatVar);
        NSLog(@"doubleVar = %e", doubleVar);
        NSLog(@"doubleVar = %g", doubleVar);
        NSLog(@"charVar = %c", charVar);  
    }
    return 0;
}

注:限定词:long, long long, short, unsigned, signed.

id类型:id数据类型可存储任何类型的对象。某种程序上是一般对象类型。如:

id graphicObject;//将graphicObject声明为id类型的变量 

可以声明方法使其具有id类型的返回值,如:

-(id) newObject:(int) type;//声明一个名为newObject的实例方法,具有名为type的单个整形参数并有id类型的返回值。

id类型是多态和动态绑定的基础。

//简单四则运算器,实现Calculator类
#import <Foundation/Foundation.h>
@interface Calcutor:NSObject
//累加方法
-(void) setAccumulator:(double)value;
-(void)clear;
-(double)accumulator;
//算术方法
-(void)add:(double)value;
-(void)subtract:(double)value;
-(void)multiply:(double)value;
-(void)divide:(double)value;
@end
@implementation Calculator{
    double accumulator;
}
-(void) setAccumulator:(double)value{
    accumulator = value;
}
-(void)clear{
    accumulator = 0;
}
-(double)accumulator{
    return accumulator;
}
-(void) add: (double) value{
    accumulator += value;
}
-(void) subtract: (double) value{
    accumulator -= value;
}
-(void)multiply:(double)value{
    accumulator *= value;
}
-(void) divide:(double)value{
    accumulator /= value;
}
@end
int main(int argc, cahr *argv[]){
    autoreleasepool{
        [deskCalc setAccumulator:100.0];
        [deskCalc add:200.];
        [deskCalc subtract:10.0];
        [deskCalc multiply 5];
        NSLog(@"the result is %g",[deskCalc accumulator]);
    }
    return 0;
}


5.循环结构

for循环.while循环. do循环

//计算8个三角数
#import <Foundation/Foundation.h>
int main(int asgc, char *argv[]){
    @autoreleasepool{
        int trangularNumber;
        triangularNumber = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8;
        NSLog(@"The eight triangular number is %i", triangularNumber);    
    }
    return 0;
}
//计算第200个三角数和程序
#import <Foundation/Foundation.h>
int main(int argc, char * argv[]){
    @autoreleasepool{
        int n, triangularNumber;
        triangularNumber = 0; 
        for( n = 1; n <= 200; n = n+1){
            triangularNumber += n;
        }
        NSLog(@"The 200th triangular number is %i", triangularNumber);    
    }
    return 0;
}
//键盘输入
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]){
    @autoreleasepool{
        int n,number, triangularNumber;
        NSLog(@"Whar triangularNumber do you want?");
        scanf("%i", &number);
        triangularNumber = 0;
        for(n = 1; n <= number; ++n){
            triangularNumber += n;
        }
        NSLog(@"Triangular number %i is %i\n", number, triangularNumber);
    }
    return 0;
}


break循环:跳出当前循环,如果有多层循环则跳出本层循环体。

continue:跳出本次循环。


6.选择结构

if语句,switch语句,conditional运算符

//生成素数表
#import <Foundation/Foundation.h>
int main(int argc, char * argv[]){
    @autoreleasepool{
        int p, d, isPrime;
        for( p = 2; p <= 50; ++p){
            isPrime = 1; 
            for(d = 2; d < p; ++d){
                if(p%d == 0){
                    isPrime = 0;
                }
                if(isPrime != 0){
                    NSLog(@"%i", p);
                }
            }
        }
    }
    return 0;
}


7.类

分离接口和实现文件:

//接口文件Fraction.h
#import <Foundation/Foundation.h>
@interface Fraction: NSObject
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
-(double) convertToNum;
@end

Fraction类的实现细节需要输入到文件Fraction.m中

#import "Fraction.h"
@implementation Fraction {
    int numerator;
    int denominator;
}
-(void) print{
    NSLog(@"%i/%i", numerator, denominator);
}
-(void) setNumerator: (int) n{
    numerator = n;
}
-(void) setDenominator:(int) d{
    denominator = d;
}
-(int) numerator{
    return numerator;
}
-(int) denominator{
    return denominator;
}
-(double) convertToNum{
    if(denominator != 0){
        return (double) numerator/denominator;
    }else{
        return NAN;
    }    
}
@end


合成存取方法:

自动生成存取方法:在接口部分中使用@property指令标识属性:

如:新接口添加@property指令
@interface Fraction: NSObject
@property int numerator, denominator;
-(void) print;
-(double) convertToNum;
@end
//让OC编译器自动生成存取方法:在实现部分使用@synthesize
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;//通知OC编译器为这两个属性生成存取方法
-(void)print{
    NSLog(@"%i/%i",numerator,denominator);
}
-(double) convertToNum{
    if(denominator != 0){
        return (double) numerator /denominator;
    }else{
        return NAN;
    }
}
@end





转载于:https://my.oschina.net/xiejunbo/blog/471468

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值