话说我打算一天学完object c语法,系列1--------来自书Objective-c程序设计

类型:

NSString

NSInteger

NSLong控制台输出

 

NSObject:对象

比较两个对象是否相等:

NSObject *object1 = [[NSObject alloc] init];
NSObject *object2 = obejct1;
if([object isEqual:object2])
{
	NSLong(@"is equal");
}
else
{
	NSLong(@"is not equal");
}

判断一个string是否为空:

NSString *shortString  = @"HelloWorld";
if([shortString lengtg] == 0)
{
	NSLong(@"is empty string");
}
else
{
	NSLong(@"is not empty string ");
}

循环结构,比如for:

int increment = 0;
for (increment = 0; increment < 100; increment++)
{
	NSLog(increment++);
}

-(void) method : (int) arguments;

-为方法类型 +表示类方法


-(id) initWithAge:(int) _age identify:(int)_identify

方法名称为initWithAge,第一个参数是(int) _age,第二个参数是(int)_identify

identify其实是对_identify的一个说明,initWithAge对_age一个说明

 

方法的调用:

1.[类名或对象名 方法名];

2.对象名.方法名


NSString *s;
s = [[NSString alloc] initWithString:@Hello iphone4S];


Person *person = [Person alloc];
person = [person init];

-(id) initWithAge:(int)_age identify:(int) _identify
{
if(self = [super init])
{
age = _age;
identify = _identify;
}
return self;
}

NSLog(@"self class is : %@", [self class]);

@class 和import的区别

@class只是用到了声明,如果需要用到这个class里面的方法,还需要import,通常在.h文件里面只需要@class,.m文件里面需要import

 

oc里面不需要get说明,直接使用:

 

多个成员变量可以不写get和set,使用property(list) names

@implementation Person

@synthesize myNumber

@end

调用的时候:

NSLog(@"Person number : %d",[person myNumber]);

 

还有个@property(nonatomic) int number

atomic是多线程的一个保护技术

 

重载:

定义一个同名的新方法,新方法必须具有相同的返回类型,并且参数的个数和重载的方法相同

 

class里面的权限控制:

同时也具有public protected private,oc也是单继承

 

 

成员变量的new是这样的:

Person *person = [[Person alloc] init];

但是对应的需要在return之前使用:

[pool drain]或者[pool release];

drain用于清除pool中对象,release用来释放内存 

比如可以这样[person release]

 

方法调用:

[实例 方法]

[类名 方法]

完整的方法调用格式为:

[接收方 名字1:参数1 名字2: 参数2 名字3: 参数3 ...]

 

oc运行在一个方法调用中嵌套另一个方法调用,比如:

[NSString stringWithFormat:[test format]];

另外还有一单,self类似this,可以使用self调用本类中的方法:

-(BOOL) isQualified
{
return ([self age] > 21);
}

输入输出,和c差不多,也有scanf,输出用NSLog(),占位符前面需要加上@,如果是oc内置类型,比如NSString需要这样:%@


id类型和class的简单使用:

typedef:

和c是一样的

typedef int myInt

myInt age;

 

 

BOOL类型

YES、NO

 

选择器SEL

P44 用到再说

 

 

创建一个类

 

静态成员变量与类方法

static int intY;

+(int) staticIntY

就像上面所写的,需要使用“+”来声明类方法

 

变量的存储类型:

1、auto、自动局部变量,是缺省设置

2、const

3、volatile,这个修饰符刚好和const相反,它明确地告诉编译器,该变量的值 会发生改变,他用来修饰被不同线程访问和修改的变量

 

定义@property修饰符来设置成员变量的get和set

修饰符可以是:

话说我打算一天学完object c语法,系列1--------来自书Objective-c程序设计_第1张图片

实现一个例子P119

MyClass.h:

//
//  MyClass.h
//  test
//
//  Created by Dawn on 13-5-27.
//  Copyright (c) 2013年 zeng. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyClass : NSObject{
    int intValue;
    float floatValue;
}

@property int _intValue;
@property (copy) NSString *name;
@property float floatValue;
@property (readonly, getter = getANickname) NSString *nickname;

@end 

MyClass.m:

//
//  MyClass.m
//  test
//
//  Created by Dawn on 13-5-27.
//  Copyright (c) 2013年 zeng. All rights reserved.
//

#import "MyClass.h"

@implementation MyClass

@synthesize _intValue = intValue, name;

// 这条语句不是必须的
@dynamic floatValue;

-(float) floatValue{
    return floatValue;
}

-(void)setFloatValue:(float)aValue{
    floatValue = aValue;
}

-(NSString *)getANickname{
    return @"Lee";
}

@end

main.m:

//
//  main.m
//  test
//
//  Created by Zeng on 13-5-24.
//  Copyright (c) 2013年 zeng. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "YourClub.h"
#import "Membership.h"
#import "MyClass.h"


int main(int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 
    MyClass *class1 = [[MyClass alloc] init];
    [class1 set_intValue:1];
    [class1 setName:@"Sam"];
    [class1 setFloatValue:1.1f];
    
    NSLog(@"intValue is %i, name is %@, floatValue is %g, nickname is %@", [class1 _intValue], [class1 name], [class1 floatValue], [class1 getANickname]);
    
    [class1 release];
    
    [pool release];
    return 0;
} 

         在object-c 2.0中,在.h文件中使用@property来标识属性(一般是实例变量);在实现文件中(也就是扩展名为.m的文件),使用@synthesize标识所声明的属性,让系统自动生成设置方法和获取方法。


声明一个多参数的方法:

MyClass.h:

//
//  MyClass.h
//  test
//
//  Created by Dawn on 13-5-27.
//  Copyright (c) 2013年 zeng. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyClass : NSObject{
    NSString *name;
    int age;
}

@property (nonatomic, copy) NSString *name;
@property (nonatomic) int age;

-(void) setName:(NSString *)theName andSetTheAge: (int) theAge;

@end

MyClass.m:

//
//  MyClass.m
//  test
//
//  Created by Dawn on 13-5-27.
//  Copyright (c) 2013年 zeng. All rights reserved.
//

#import "MyClass.h"

@implementation MyClass
@synthesize name;
@synthesize age;


-(void) setName:(NSString *)theName andSetTheAge: (int) theAge{
    [self setName:theName];
    [self setAge:theAge];
}

@end 

main.m:

//
//  main.m
//  test
//
//  Created by Zeng on 13-5-24.
//  Copyright (c) 2013年 zeng. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "YourClub.h"
#import "Membership.h"
#import "MyClass.h"


int main(int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 
    MyClass *class1 = [[MyClass alloc] init];
    [class1 setName:@"zengraoli" andSetTheAge:36];
    NSLog(@"name is %@, age is %i", [class1 name], [class1 age]);
    
    [pool release];
    return 0;
}



你可能感兴趣的:(话说我打算一天学完object c语法,系列1--------来自书Objective-c程序设计)