您的位置:首页 > 移动开发 > Objective-C

Objective-C:OC的字符串、类与对象

2016-08-24 19:30 295 查看

OC的字符串

void print(NSString *str){
NSLog(@"%@",str);
}

int main() {
@autoreleasepool {
NSLog(@"Hello, World!");
NSString* str1=@"This is a string";
NSLog(@"%@",str1);
NSString* str2;
str2=str1;
str2=@"This is another string";
print(str2);

}
return 0;
}


类与对象(1)

类:是结构体的升级,用于定义变量

1.1关键字

1.2.属性前加下划线

1.3类里面有方法(函数)

1.4 类的变量只能定义在堆上,不能定义在栈上,且不需要 自己释放

1.5 类中的方法被调用时需要使用中括号

1.6 类中的属性不能在类外被操作,需要使用setter赋值,用getter访问

对象

2.1 对象是一种特殊的变量

2.2 对象与变量的区别是,对象可以调用类中的方法

2.3 对象也被称为实例。用类定义一个对象,也被称为类的 实例化

分割文件,类的声明在.h文件中,类的方法在.m文件中

@interface MyClass :NSObject
{
int _i; //属性前面加下划线
char _ch;
}
-(void)method; //方法声明
-(void)setI:(int)i;
-(int)getI;              //一般get省略,直接写I,程序员约定的偷懒方式
-(void)setCh:(char)ch;
-(char)getCh;
@end

@implementation MyClass //类中方法定义,所有类中的方法写到里边

-(void)setI:(int)i
{
_i=i;
}
-(int)getI
{
return _i;
}
-(void)setCh:(char)ch
{
_ch=ch;
}
-(char)getCh
{
return _ch;
}

-(void)method{
NSLog(@"类中的函数被执行了");
}

@end

int main() {
@autoreleasepool {
//OC类的变量不能定义在栈上
MyClass *mc=[MyClass alloc];    //定义对象
[mc method]; //方法调用
[mc setI:20]; //属性赋值,属性需要方法来访问,不能直接访问
int i=[mc getI];
[mc setCh:'a'];
char ch=[mc getCh];
NSLog(@"i=%d,ch=%c",i,ch);

}
return 0;
}


类与对象(2)

定义带有多个形参的方法

访问权限

2.1 属性(4种)私有,保护,包内,公有

2.2 方法(2种)私有 公有

属性:由关键字自动生成的成员变量的声明+settet+getter

//1.定义带有多个形参的方法

-(void)setName:(NSString *)name andAge:(int)age{ //同时修改两个属性的方法
_name=name;
_age=age;
}
-(void)setName:(NSString *)name andAge:(int)age andID:(NSString *)ID andAddress:(NSString *)address{
_name=name;
_age=age;
_ID=ID;
_address=address;
} //同时修改四个属性的方法


//2.访问权限

@interface CZExample : NSObject
{
int _i0; //_i0的访问权限是保护的,默认状态
@public
int _i1; //_i1的访问权限是共有的,一般不建议使用

@package
int _i2; //_i2的访问权限是包内的
@protected
int _i3; //访问权限是保护的

@private
int _i4; //访问权限私有的,作用域在类内。在子类中不能使用

}
-(void)method;
@end
@implementation CZExample
{
int _i5; //在implementation中关键字不起作用吗,定义的属性全部为私有的
}
-(void)method{ //公有方法

[self privateMethod]; //self 调用私有方法

NSLog(@"这是一个公有方法");
}
-(void)privateMethod{ //私有方法,在interface中没有声明,直接写出方法的函数体是属于私有方法
NSLog(@"这是一个私有方法");
}
@end


//3.属性:由关键字自动生成的成员变量的声明+settet+getter

@interface CZFraction3 : NSObject
@property int n;    //自动定义_n,并声明定义set,get方法。
@property int d;
@property(readonly) double value;   //只读属性
-(void)show;
@end

@implementation CZFraction3
-(double)value{               //从新定义get方法
return self.n*1.0/self.d;
}

-(void)show{
NSLog(@"%d/%d",self.n,self.d);
}
@end

int main(int argc, const char * argv[]) {
@autoreleasepool {
CZFraction3 *f3=[CZFraction3 alloc];
f3.n=8;     //调用setter方法
f3.d=10;
[f3 show];
NSLog(@"%lg",f3.value);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息