Object-C基础

cocoa

类:

传统的写法:
Demo.h

//
//  Demo.h
//  demoClass
//
//  Created by 王 on 13-12-16.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import <Foundation/Foundation.h>

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

//初始化方法
-(id)initWithAge:(int)_age andIde:(int)_ide andName:(NSString *)_name;

-(void)setAge:(int)_age;

-(int)getAge;

-(void)setIde:(int)_ide;

-(int)getIde;

-(void)setName:(NSString *)_name;

-(NSString *)getName;

@end

Demo.m

//
//  Demo.m
//  demoClass
//
//  Created by 王 on 13-12-16.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import "Demo.h"

@implementation Demo
//初始化方法,只有[super init]初始化父类成功后子类才能初始化
-(id)initWithAge:(int)_age andIde:(int)_ide andName:(NSString *)_name{
    if(self = [super init]){
        age = _age;
        ide = _ide;
        name = _name;
    }
    return self;
}

-(void)setAge:(int)_age{
    age = _age;
}

-(int)getAge{
    return age;
}

-(void)setIde:(int)_ide{
    ide = _ide;
}

-(int)getIde{
    return ide;
}

-(void)setName:(NSString *)_name{
    name = _name;
}

-(NSString *)getName{
    return name;
}

@end

main.m

//
//  main.m
//  demoClass
//
//  Created by 王 on 13-12-10.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Test.h"
#import "Demo.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {        
        // insert code here...
        NSLog(@"Hello, World!");
        
        Demo *d = [[Demo alloc] initWithAge:15 andIde:212321 andName:@"lily"];
        
        NSLog(@"she is %d,and hers identify is %d,she names %@",[d getAge],[d getIde],[d getName]);

        
    }
    return 0;
}

OC特有的用法(设置器@property和访问器@synthesize)
Demo.h

//
//  Demo.h
//  demoClass
//
//  Created by 王 on 13-12-16.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import <Foundation/Foundation.h>

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

//初始化方法
-(id)initWithAge:(int)_age andIde:(int)_ide andName:(NSString *)_name;

@property(nonatomic) int age;
@property(nonatomic) int ide;
@property(nonatomic,retain) NSString *name;
@end

Demo.m

//
//  Demo.m
//  demoClass
//
//  Created by 王 on 13-12-16.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import "Demo.h"

@implementation Demo
//初始化方法,只有[super init]初始化父类成功后子类才能初始化
-(id)initWithAge:(int)_age andIde:(int)_ide andName:(NSString *)_name{
    if(self = [super init]){
        age = _age;
        ide = _ide;
        name = _name;
    }
    return self;
}

@synthesize age;
@synthesize ide;
@synthesize name;

@end

main.m

//
//  main.m
//  demoClass
//
//  Created by 王 on 13-12-10.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Test.h"
#import "Demo.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {        
        // insert code here...
        NSLog(@"Hello, World!");
        
        Demo *d = [[Demo alloc] initWithAge:15 andIde:212321 andName:@"lily"];
        
        NSLog(@"she is %d,and hers identify is %d,she names %@",[d age],[d ide],[d name]);

        
    }
    return 0;
}

 备注:
在@property()得括号中,可以填写的属性有:
readwrite:默认
readonly:只读,意味着没有set方法,只有get方法
assign:默认,引用计数不增加(一般用于基本数据类型,如int)
retain:引用计数增加(一般用于对象方面,如NSString *name)
actomic:默认,原子性
nonatomic:非原子性。是OC中一种线程保护技术,防止在未完成的时候,被另外一个线程使用,造成数据错误。

点语法:(看下面代码即可明白)

//
//  main.m
//  demoClass
//
//  Created by 王 on 13-12-10.
//  Copyright (c) 2013年 Bo Li. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Test.h"
#import "Demo.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {        
        // insert code here...
        NSLog(@"Hello, World!");
        
        Demo *d = [[Demo alloc] initWithAge:15 andIde:212321 andName:@"lily"];
        
        d.age = 10;
        d.name = @"hhaa";
        
        NSLog(@"she is %d,and hers identify is %d,she names %@",[d age],[d ide],[d name]);

        
    }
    return 0;
}

 static关键字:
类体内的全局变量声明。

static int count = 1000;

要点:
1.声明在任何方法之外;
2.在该文件内;
3.所有位于这条语句之后的方法都可以访问count得值,而其他文件中的方法则不可。

 UIKIT

UIView:视图的基础,
UIViewControl:视图控制器的基类,
UIResponder:表示一个可以接收触摸屏上的触摸事件的对象。

窗口(UIWindow):
      窗口是视图(UIView)的一个子类。
窗口的主要功能:
  1.提供一个区域来显示视图;
  2.将事件(event)分发给视图;
注意:一个应用通常只有一个窗口,但是也有例外。

UIScreen:获取硬件设备的屏幕尺寸,在做适配的时候用到,比如iphone的屏幕和ipad的屏幕。

IOS坐标系统:

CGPoint potin = CGPointMake(x,y);//位置
CGSize size = CGSizeMake(w,h);//大小
CGRect rect = CGRectMake(x,y,w,h);//位置和大小。

Frame,Bounds,Center:
Frame:以其父视图为起点,得到他自己的位置信息;
Bounds:以IOS的坐标(0,0)为原点;
Center:表示视图中心点所在位置。

 创建视图:

    //通过xib的方式来创建视图对象
    NSBundle *bundle = [NSBundle mainBundle];
    NSArray *arr = [bundle loadNibNamed:@"myView" owner:self options:nil];
    UIView *myView = [arr objectAtIndex:0];
    
    //通过代码创建视图对象
    CGRect viewRect = CGRectMake(0, 0, 100, 100);
    UIView *myView = [[UIView alloc] initWithFrame:viewRect];

视图调用方法(视图的层次关系):

//基本的添加和删除子视图
addSubview:                     //添加子视图
insertSubview:atIndex:          //视图插入到指定索引位置
insertSubview:aboveSubview:     //视图插入指定视图之上
insertSubview:belowSubview:     //视图插入指定视图之下
bringSubviewToFront:            //把视图移动到最顶层
sendSubviewToBack:              //把视图移动到最底层
exchangeSubviewAtIndex:withSubviewAtIndex: //把两个索引对应的视图调换位置
removeFromSuperview:            //把视图从父视图中移除

备注:当调用addSubview的时候会对其进行保留,可理解为retain一个对象;
         当调用removeFromSuperview的时候会对其进行释放,可理解为release一个对象。

原文地址:https://www.cnblogs.com/thinksasa/p/3196149.html