`
百合不是茶
  • 浏览: 354916 次
社区版块
存档分类
最新评论

oc类和对象的创建和NSLog输出

阅读更多

oc和java的语法区别比较大,所以进度有点慢:重点在于基础

 

一:调试基础 输出语句oc基本与c相似,与java就有很大的不同(java直接是System.out.println("");)

字符串不是几本数据类型,所以需要使用NSLog(@"%@",name);输出,切记

 

OC中NSLog函数输出格式详解
%@ 对象
• %d, %i 整数
• %u 无符整形
• %f 浮点/双字
• %x, %X 二进制整数
• %o 八进制整数
• %zu size_t
• %p 指针
• %e 浮点/双字 (科学计算)
• %g 浮点/双字
• %s C 字符串
• %.*s Pascal字符串
• %c 字符
• %C unichar
• %lld 64位长整数(long long)
• %llu 无符64位长整数
• %Lf 64位双字

  

 

 

二:类和对象的创建(这里只是记录h,m,main三个文件之间的关联,内存的申请和释放以后会专门的研究)

oc与java不同,java类的实现和声明都是在一个文件中而oc类的声明在.h文件中,实现在.m文件中也就是说一个oc类需要有两个文件,这真它妈蛋疼啊,

 

java引入类import android.app.*;

 

oc引入类 #import "Student.h" 

 

 

Student.h文件声明类及属性,方法

 

//
//  Student.h
//  test_01
//
//  Created by wang on 15/11/1.
//  Copyright © 2015年 wang. All rights reserved.
//

#ifndef Student_h
#define Student_h

@interface Student : NSObject{
    
    int age;
    NSString* name;
    int address;
    
}
//h文件中定义参数时,必须要实现该参数的方法如age -(int)age,下面实现了age和name的方法,可以在main文件中使用对象来传递消息,address没有实现 则无法通过消息来传递
-(int)age;
-(NSString*)name;
-(int)address;
- (void)setAge:(int)newAge;//定义方法
- (void)addName:(int)newName;
- (void)setAddress:(int)address;
-(void)setName:(NSString*)newName andAge:(int)newAge setAddress:(int)newAddress;//oc对象的创建的对象都是指针对象


@end
#endif /* Student_h */

 注意:

 

 

   1. @interface --------> 等于java中的class

     2. 类名后的冒号:---------> 等于java中的extends

     3. 函数前面的减号-  ---------> 表示对象方法

     4函数前面的加号+  ---------> 表示类方法,等于java的static方法

     5. 函数的返回类型和参数的类型必须用括号,形参用冒号:表示

 

NSString* name;类似于java的String name;

 

 

Student.m实现Student.h中定义的方法

 

//
//  Student.m
//  test_01
//
//  Created by wang on 15/11/1.
//  Copyright © 2015年 wang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"

@implementation Student

// m 文件时实现其具体的方法等
// h 文件时定义方法和变量等

//-(void) 类似于java的private私有的
//+(void) 类似于java的static方法,类方法

//java对方法的使用叫调用,oc称为消息的传递

    -(int)age{
        return age;//获得age
    }
-(int)address{
    return address;//获得age
}
-(NSString*)name{
    return name;
}

-(void)setAge:(int)newAge{
    age=newAge; //将传入的newAge的值赋给age
}

//定义方法
-(void)setName:(NSString *)newName andAge:(int)newAge setAddress:(int)newAddress{
    name=newName;
    age=newAge;
    address=newAddress;
    
}


@end

 

Student.m文件必须是 @implementation开头 @end结尾  这里要和java的定义接口和实现接口区别开

 

oc的程序入口和java类似都是mian函数

 

 

//
//  main.m
//  test_01
//
//  Created by wang on 15/11/1.
//  Copyright © 2015年 wang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {//自动回收池
        
        
        
        Student* st=[[Student alloc]init];
        [st setAge:(100)];
        NSString* sname=@"百合不是茶";
        
        [st setName:(sname) andAge:(99) setAddress:(23)];
        NSLog(@"name=%@",st.name);
        NSLog(@"name:%@",[st name]);
        NSLog(@"%d",[st age]);
        NSLog(@"%d",st.address);//由于没有在h文件中实现其方法,无法通过编译
        NSLog(@"%d",st.address);
        
//        NSLog(@"%@",st->name);//默认属性时protected所以无法打印
        
        // insert code here...
        NSLog(@"Hello, World!");//字符串的打印
        for (int n=0; n<10; n++) {
//            NSLog(@"第一次写oc的程序,有点小激动是吧。。。。。");
        }
        BOOL b=2;//bool类型的打印
        NSLog(@"BOOL--b-->%s",b?"YES":"NO");//打印字符串
        NSLog(@"BOOL--b-->%@",b?@"YES":@"NO");//打印对象
        NSLog(@"BOOL--b-->%d",b);//打印数字s
        //浮点单精度打印
        float f=23.00;
        
        NSLog(@"float=%f",f);
        
//        双精度
        double d=32;
        NSLog(@"double=%g",d);
        
        //对象
        NSString* s1=@"wang";
        NSLog(@"s1=%@",s1);
        
    //定义char数组并输出
        char* c[4]={"nihao","hello_java","hello_Android","hello_Object-c"};
        for (int n=0; n<4; n++) {
            NSLog(@"%s",c[n]);
        }
        
        
    }
    return 0;
}

 运行结果:

2015-11-01 19:01:22.951 test_01[1651:118415] name=百合不是茶
2015-11-01 19:01:22.952 test_01[1651:118415] name:百合不是茶
2015-11-01 19:01:22.952 test_01[1651:118415] 99
2015-11-01 19:01:22.952 test_01[1651:118415] 23
2015-11-01 19:01:22.952 test_01[1651:118415] 23
2015-11-01 19:01:22.952 test_01[1651:118415] Hello, World!
2015-11-01 19:01:22.952 test_01[1651:118415] BOOL--b-->YES
2015-11-01 19:01:22.952 test_01[1651:118415] BOOL--b-->YES
2015-11-01 19:01:22.952 test_01[1651:118415] BOOL--b-->2
2015-11-01 19:01:22.952 test_01[1651:118415] float=23.000000
2015-11-01 19:01:22.952 test_01[1651:118415] double=32
2015-11-01 19:01:22.952 test_01[1651:118415] s1=wang
2015-11-01 19:01:22.952 test_01[1651:118415] nihao
2015-11-01 19:01:22.952 test_01[1651:118415] hello_java
2015-11-01 19:01:22.953 test_01[1651:118415] hello_Android
2015-11-01 19:01:22.953 test_01[1651:118415] hello_Object-c
Program ended with exit code: 0

 

 

oc对象的创建需要手动申请和释放,由于使用了自动回收池就没有手动释放  [st release]

 

 Student* st=[[Student alloc]init];

   java创建对象 Student st =new Student();

 

  oc消息的传递

   [st setAge:(100)]; /调用方法,传递参数

  java的调用

   st.setAge(100);

 

 

注意:如果在Student.m文件中未实现address和name的方法,mian文件中是无法打印出值的会出现运行时异常

-(int)address{

    returnaddress;//获得age

}

-(NSString*)name{

    return name;

 

}

 

异常:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Student name]: unrecognized selector sent to instance 0x1006001c0'

 

*** First throw call stack:

 

 

 

 

 

1
0
分享到:
评论

相关推荐

    OC学习的全部总结

    Objective-C(简称OC)是一种面向对象的编程语言,它是苹果公司开发的Cocoa Touch和Mac OS X框架的基础。本文将全面总结OC的学习要点,包括类、对象、属性、setter、指定初始化、便利构造器等核心概念。 首先,我们...

    OC与Swift混编

    - 使用`print()`在Swift中输出日志,而OC中通常是`NSLog()`。 以上就是OC与Swift混编的主要知识点,通过熟练掌握这些,开发者可以灵活地在新旧代码间穿梭,充分利用两者的优点,构建出高效、稳定的iOS应用。在实际...

    OC基础知识

    在深入探讨OC基础知识之前,我们先理解OC的核心特性:消息传递、类与对象、继承、多态和动态性。 1. **消息传递** 在OC中,对象间的通信是通过发送消息实现的。比如,`[receiver performSelector:@selector(method...

    iOS:JavaScriptCore.framework的使用.OC篇

    1. **暴露OC方法给JS**: 使用`@objc`和`JSExport`协议来标记OC类和方法,使得它们可以被JavaScript调用。 ```objc @interface MyExportedClass : NSObject - (NSString *)greetWithName:(NSString *)name; @end...

    JS与OC的交互

    在Objective-C或Swift代码中,我们可以使用`JSContext`类来创建一个JavaScript执行环境。`JSContext`提供了执行JavaScript代码、获取JavaScript对象以及将Objective-C对象暴露给JavaScript的方法。例如: ```objc #...

    OC 基础总结

    在Objective-C(OC)编程中,集合类型是非常重要的数据结构,它们用于存储和管理多个对象。本篇文档主要总结了OC中基础的集合类型,包括数组(NSArray和NSMutableArray)以及字典(NSDictionary)和集合(NSSet)。...

    iOS开发练手项目(OC版)

    OC是面向对象的语言,其消息传递机制和C++有所不同,学习如何创建和使用类是必不可少的。 2. **Xcode IDE使用**:项目开发通常在Xcode环境中进行,了解Xcode的基本操作,如新建项目、设置目标设备、编译与运行、...

    OC md5加密算法实现

    我们可以创建一个类别(Category)来扩展`NSString`,增加MD5加密的方法,使得对字符串进行MD5处理变得更加便捷。 以下是一个简单的OC MD5加密类别实现: ```objc #import #include @interface NSString (MD5) ...

    Objective-C&UIKit自学笔记

    方法类型分为实例方法(`-`)和类方法(`+`)。例如: ```objc @interface MyClass : NSObject - (void)myInstanceMethod; + (void)myClassMethod; @end ``` `NSInteger`和`NSUInteger`是Objective-C中用于整数...

    简单讲解Objective-C的基本特性及其内存管理方式..pdf

    在每个OC对象内部,都专门有4个字节的存储空间来存储引用计数器。 引用计数器的作用是判断对象要不要回收的唯一依据。如果计数器不为0,则对象存在。Retain消息使计数器+1,Release消息使计数器-1,retainCount消息...

    iOS开发教程(大神原创笔记)

    - 通过匿名对象创建和调用方法:`[[Car new] run];` #### 三、深入理解Objective-C类的结构 **1. 属性声明:** - 使用`@property`来声明类的属性,例如:`@property (assign) int speed;`。 - `assign`属性表示...

    Objective-C笔试及答案

    - **对比分析:** 构造不是面向对象编程的基本特性,构造主要指类的构造函数或初始化方法,用于创建类的实例。 #### 十二、所有类的根类 **知识点:** 根类 - **背景介绍:** 在Objective-C中,所有类最终都继承自`...

    iOS开发教程(大神原创笔记)副本.pdf

    开发者可以通过定义类、创建对象、发送消息等方式来构建复杂的应用逻辑。此外,Objective-C还支持动态消息传递机制,这意味着可以在运行时确定对象接收的消息及其响应的行为,这为编写灵活而高效的iOS应用提供了可能...

    苹果游戏编程

    - **控制台打印**:OC使用`NSLog`函数替代C语言中的`printf`来输出信息。 3. **常用数据类型**: - **整型**:`NSInteger` - **布尔类型**:`BOOL` - **结构体**:`NSRange` - **字符串**:`NSString` 4. **...

    Objective-C 语言基础语法简介

    `NSLog`用于输出调试信息或日志信息,对于开发和调试过程非常有用。 - 示例: ```objc NSLog(@"This is a log message."); ``` #### 七、控制结构 Objective-C 中的控制结构与 C 语言相似,包括但不限于: - `if...

    Objective-c NSTask的使用示例

    5. **设置输入和输出**: `NSTask`提供了`setStandardInput:`、`setStandardOutput:`和`setStandardError:`方法,可以分别设置标准输入、输出和错误流。你可以将这些流连接到文件、管道或者自定义的`NSPipe`对象,...

    iOS常见面试题

    - 用于管理Objective-C对象的生命周期,适用于OC对象类型。 - **`copy`**: - set方法的实现是先释放旧值,然后复制新值。 - 适用于需要确保值的独立性和不可变性的场景,如 `NSString`、`NSBlock` 等类型。 - ...

    iOS笔试题

    对象创建时计数器初始化为 1;当计数器归零时,对象会被销毁。 2. **操作**: - **`retain`**:增加对象引用计数。 - **`release`**:减少对象引用计数。 - **`autorelease`**:延迟释放对象,直到自动释放池处理...

Global site tag (gtag.js) - Google Analytics