2016-09-19 11:53:42 u014370148 阅读数 4602
  • iOS开发教程之OC语言

    Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、AutoreleasePool、浅拷贝详述、深拷贝详述)等内容。

    40534 人正在学习 去看看 欧阳坚

Unity端

新建个脚本,然后绑定到一个对象上,脚本代码如下,这片代码我就不多说了,不懂得自己 
去看下iOS和Unity的互调。弄完后导出IOS工程。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Runtime.InteropServices;//Must be Defined

public class GetIdentertyControl : MonoBehaviour {

    // Use this for initialization
    public Text IDFA;
    public Text DisplayName;
    public Text DeviceModel;

    [DllImport("__Internal")]
    private static extern void _GetIDFA ();

    public void GetIDFA(string str){
        if (string.IsNullOrEmpty(str)) {
            Debug.Log("IDFA is NULL");
            return;
        }
        IDFA.text = str;
    }

    [DllImport("__Internal")]
    private static extern void _GetDisplayName ();

    public void GetDisplayName(string str){
        if (string.IsNullOrEmpty(str)) {
            Debug.Log("DisplayName is NULL");
            return;
        }
        DisplayName.text = str;
    }

 [DllImport("__Internal")]
    private static extern void _GetDeviceModel ();

    public void GetDeviceModel(string str){
        if (string.IsNullOrEmpty(str)) {
            Debug.Log("DeviceModel is NULL");
            return;
        }
        DeviceModel.text = str;
    }

    public void OnClickButton(){
        if(Application.platform != RuntimePlatform.OSXEditor){
            _GetIDFA();
            _GetDeviceModel();
           _GetDisplayName();
        }
    }
}



IOS端

  • 先新建个OC的类吧,然后把官方的KeychainItemWrapper代码拷贝进去。然后在CompileSources中选中该类 添加-fno-objc-arc。
  • 导入两个包
  • Security.framework
  • AdSupport.framework
  • 然后再新建一个类,来使用之前导入的KeychainItemWrapper:
  • #import "NinjaUUID.h"
    #import "KeychainItemWrapper.h"
    #include <sys/types.h>
    #include <sys/sysctl.h>
    
    #define APP_IDENTIFIER @"zhujingjing@bccv.com"
    
    @implementation NinjaUUID
    
    +(NSString*) uuid {
        
        CFUUIDRef puuid = CFUUIDCreate( nil );
        CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
        NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
        CFRelease(puuid);
        CFRelease(uuidString);
        
        return result;
    }
    
    +(void) saveToKeyChain {
        
        NSString *uuid = [self uuid];
        
        KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:APP_IDENTIFIER accessGroup:nil];
        
        [wrapper setObject:uuid forKey:(__bridge id)kSecValueData];
        
        
    }
    
    +(NSString*) getUUIDFromKeyChain {
        KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:APP_IDENTIFIER accessGroup:nil];
        
        NSString *password = [wrapper objectForKey:(__bridge id)kSecValueData];
        return password;
    }
    
    + (NSString *)getCurrentDeviceModel
    {
        int mib[2];
        size_t len;
        char *machine;
        
        mib[0] = CTL_HW;
        mib[1] = HW_MACHINE;
        sysctl(mib, 2, NULL, &len, NULL, 0);
        machine = malloc(len);
        sysctl(mib, 2, machine, &len, NULL, 0);
        
        NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
        free(machine);
    
        //iPhone
        if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G (A1203)";
        if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G (A1241/A1324)";
        if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS (A1303/A1325)";
        if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (A1332)";
        if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (A1332)";
        if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (A1349)";
        if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S (A1387/A1431)";
        if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (A1428)";
        if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (A1429/A1442)";
        if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone5c (A1456/A1532)";
        if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (A1507/A1516/A1526/A1529)";
        if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (A1453/A1533)";
        if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (A1457/A1518/A1528/A1530)";
        if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 (A1549/A1586)";
        if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus (A1522/A1524)";
        if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s (A1633/A1688/A1691/A1700)";
        if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus (A1634/A1687/A1690/A1699)";
        
        //iPod Touch
        if ([platform isEqualToString:@"iPod1,1"])   return @"iPod Touch (A1213)";
        if ([platform isEqualToString:@"iPod2,1"])   return @"iPod Touch 2G (A1288)";
        if ([platform isEqualToString:@"iPod3,1"])   return @"iPod Touch 3G (A1318)";
        if ([platform isEqualToString:@"iPod4,1"])   return @"iPod Touch 4G (A1367)";
        if ([platform isEqualToString:@"iPod5,1"])   return @"iPod Touch 5G (A1421/A1509)";
        if ([platform isEqualToString:@"iPod7,1"])   return @"iPod Touch 6G (A1574)";
        
        //iPad
        if ([platform isEqualToString:@"iPad1,1"])   return @"iPad (A1219/A1337)";
        if ([platform isEqualToString:@"iPad2,1"])   return @"iPad 2 (A1395)";
        if ([platform isEqualToString:@"iPad2,2"])   return @"iPad 2 (A1396)";
        if ([platform isEqualToString:@"iPad2,3"])   return @"iPad 2 (A1397)";
        if ([platform isEqualToString:@"iPad2,4"])   return @"iPad 2 (A1395+New Chip)";
        if ([platform isEqualToString:@"iPad3,1"])   return @"iPad 3 (A1416)";
        if ([platform isEqualToString:@"iPad3,2"])   return @"iPad 3 (A1403)";
        if ([platform isEqualToString:@"iPad3,3"])   return @"iPad 3 (A1430)";
        if ([platform isEqualToString:@"iPad3,4"])   return @"iPad 4 (A1458)";
        if ([platform isEqualToString:@"iPad3,5"])   return @"iPad 4 (A1459)";
        if ([platform isEqualToString:@"iPad3,6"])   return @"iPad 4 (A1460)";
        
        //iPad Air
        if ([platform isEqualToString:@"iPad4,1"])   return @"iPad Air (A1474)";
        if ([platform isEqualToString:@"iPad4,2"])   return @"iPad Air (A1475)";
        if ([platform isEqualToString:@"iPad4,3"])   return @"iPad Air (A1476)";
        if ([platform isEqualToString:@"iPad5,3"])   return @"iPad Air 2 (A1566)";
        if ([platform isEqualToString:@"iPad5,4"])   return @"iPad Air 2 (A1567)";
        
        //iPad mini
        if ([platform isEqualToString:@"iPad2,5"])   return @"iPad mini 1G (A1432)";
        if ([platform isEqualToString:@"iPad2,6"])   return @"iPad mini 1G (A1454)";
        if ([platform isEqualToString:@"iPad2,7"])   return @"iPad mini 1G (A1455)";
        if ([platform isEqualToString:@"iPad4,4"])   return @"iPad mini 2 (A1489)";
        if ([platform isEqualToString:@"iPad4,5"])   return @"iPad mini 2 (A1490)";
        if ([platform isEqualToString:@"iPad4,6"])   return @"iPad mini 2 (A1491)";
        if ([platform isEqualToString:@"iPad4,7"])   return @"iPad mini 3 (A1599)";
        if ([platform isEqualToString:@"iPad4,8"])   return @"iPad mini 3 (A1600)";
        if ([platform isEqualToString:@"iPad4,9"])   return @"iPad mini 3 (A1601)";
        if ([platform isEqualToString:@"iPad5,1"])   return @"iPad mini 4 (A1538)";
        if ([platform isEqualToString:@"iPad5,2"])   return @"iPad mini 4 (A1550)";
        
        if ([platform isEqualToString:@"i386"])      return @"iPhone Simulator";
        if ([platform isEqualToString:@"x86_64"])    return @"iPhone Simulator";
        return platform;
    }
    
    + (NSString *)getDisplayName{
        NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
        CFShow(infoDictionary);
        // app名称
        NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
        return app_Name;
    }
    
    @end


    再新建个类,这个类就是和Unity进行消息互换的。
  • #import "InteractiveToUnity.h"
    #import "NinjaUUID.h"
    #import <AdSupport/AdSupport.h>
    
    @implementation InteractiveToUnity
    
    void _GetIDFA (){
        const char* gameObject = "Main Camera";
        const char* functionname = "GetIDFA";
        NSString *str = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
        UnitySendMessage(gameObject, functionname, [str UTF8String]);
    };
    
    /*
    void _GetVerdorid (){
        const char* gameObject = "Main Camera";
        const char* functionname = "GetVerdorid";
        NSString *str=[NinjaUUID getUUIDFromKeyChain];
        if(str == nil || [str  isEqual: @""]){
            [NinjaUUID saveToKeyChain];
            str = [NinjaUUID getUUIDFromKeyChain];
        }
        UnitySendMessage(gameObject, functionname, [str UTF8String]);
    };
    */
    
    void _GetDeviceModel(){
        const char* gameObject = "Main Camera";
        const char* functionname = "GetDeviceModel";
        NSString *str=[NinjaUUID getCurrentDeviceModel];
        UnitySendMessage(gameObject, functionname, [str UTF8String]);
    }
    
    void _GetDisplayName(){
        const char* gameObject = "Main Camera";
        const char* functionname = "GetDisplayName";
        NSString *str=[NinjaUUID getDisplayName];
        UnitySendMessage(gameObject, functionname, [str UTF8String]);
    }
    
    @end



2018-07-08 22:51:15 u011068702 阅读数 169
  • iOS开发教程之OC语言

    Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、AutoreleasePool、浅拷贝详述、深拷贝详述)等内容。

    40534 人正在学习 去看看 欧阳坚

1、协议和委托的使用

1)、协议可以看下我的这篇博客

IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/80963731

2)、委托可以叫代理,实现协议的类的对象可以叫委托对象或者代理对象

3)、关键就是我们在控制器里类(获取数据类)里面的成员变量需要是一个委托对象或者代理对象

4)、然后调用控制器里类(获取数据类)里面的方法的时候会调用委托对象里面定义的方法







2、测试app启动弹框提示

1)、control.h

#ifndef Control_h
#define Control_h
#import <Foundation/Foundation.h>

//协议定义
@protocol UpdateAlertDelegate
-(void)updateAlert;
@end


@interface Control : NSObject
//遵循协议的一个代理变量定义
@property (nonatomic, weak) id<UpdateAlertDelegate> delegate;
- (void) willShowAlert;
@end
#endif /* Control_h */


2)、control.m

#import <Foundation/Foundation.h>
#import "Control.h"
@implementation Control

- (void) willShowAlert
{
    [self.delegate updateAlert];
}

@end


3) 、我们在ViewController.h文件里面实现在control.h文件里面定义的协议

#import <UIKit/UIKit.h>
#import "Control.h"

@interface ViewController : UIViewController<UpdateAlertDelegate>


@end




4)、在ViewController.m文件里面实现协议的定义的方法,而且实例化对象设置自己为委托对象

#import "ViewController.h"
#import "Control.h"

@interface ViewController ()


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Control *control = [Control new];
    control.delegate = self;
    [control willShowAlert];
}


- (IBAction)ui:(id)sender {
    NSLog(@"hello word");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)updateAlert
{
    UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"协议和代理" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
    
    alert.alertViewStyle=UIAlertViewStyleDefault;
    [alert show];
}
@end




3、效果


2015-09-07 16:01:50 jade07 阅读数 237
  • iOS开发教程之OC语言

    Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、AutoreleasePool、浅拷贝详述、深拷贝详述)等内容。

    40534 人正在学习 去看看 欧阳坚

自定义一个model

@interface TestModel : NSObject

@property(nonatomic,strong)NSString* name;

@property(nonatomic,assign)NSInteger age;

@property(nonatomic,strong)NSString* sex;

@end


遍历方法

 u_int count;

    objc_property_t *properties  =class_copyPropertyList([TestModel class], &count);

    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];

    for (int i = 0; i<count; i++)

    {

        const char* propertyName =property_getName(properties[i]);

        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];

    }

    free(properties);

    NSLog(@"%@",propertiesArray);

    

    TestModel* model = [[TestModel alloc] init];

    model.name = @"苗苗";

    model.age = 22;

    model.sex = @"female";

    

    for (int i = 0 ; i < propertiesArray.count; i ++ ) {

        NSLog(@"%@",[model valueForKey:[propertiesArray objectAtIndex:i]]);

    }


2016-10-26 16:52:18 MouXiaoxiong 阅读数 6975
  • iOS开发教程之OC语言

    Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、AutoreleasePool、浅拷贝详述、深拷贝详述)等内容。

    40534 人正在学习 去看看 欧阳坚

JSONModel第三方框架, 向服务器发起一个请求, 返回后的数据直接就是一个可用的Model。

其中核心技术使用的便是runtime的反射机制,通过runtime将解析好的json数据直接存放到了我们的对象模型中。

以下为自己写的一个测试demo,实现了获取属性列表并进行改值

/** 获取属性列表 */
-(void)getProperties{
    u_int count = 0;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    
    for (int i = 0; i < count; i++) {
        const char *propertyName = property_getName(properties[i]);
        const char *attributes = property_getAttributes(properties[i]);
        NSString *str = [NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding];
        NSString *attributesStr = [NSString stringWithCString:attributes encoding:NSUTF8StringEncoding];
        NSLog(@"propertyName : %@", str);
        NSLog(@"attributesStr : %@", attributesStr);
    }
}
/** 修改变量 */
- (id)updateVariable
{
    //获取当前类
    id theClass = [self class];
    //初始化
    id otherClass = [[theClass alloc] init];
    
    unsigned int count = 0;
    //获取属性列表
    Ivar *members = class_copyIvarList([otherClass class], &count);
    
    //遍历属性列表
    for (int i = 0 ; i < count; i++) {
        Ivar var = members[i];
        //获取变量名称
        const char *memberName = ivar_getName(var);
        //获取变量类型
        const char *memberType = ivar_getTypeEncoding(var);
        
        NSLog(@"%s----%s", memberName, memberType);
        
        Ivar ivar = class_getInstanceVariable([otherClass class], memberName);
        
        NSString *typeStr = [NSString stringWithCString:memberType encoding:NSUTF8StringEncoding];
        //判断类型
        if ([typeStr isEqualToString:@"@\"NSString\""]) {
            //修改值
            object_setIvar(otherClass, ivar, @"abc");
        }else{
            object_setIvar(otherClass, ivar, [NSNumber numberWithInt:99]);
        }
    }
    return otherClass;
}


2016-02-25 21:43:36 moxi_wang 阅读数 10423
  • iOS开发教程之OC语言

    Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、AutoreleasePool、浅拷贝详述、深拷贝详述)等内容。

    40534 人正在学习 去看看 欧阳坚

说明:该博客是转载的,由于是记了很久的笔记现在才放到博客上,原作者的博客地址找不到了,忘谅解


#import <objc/runtime.h>


//获取对象的所有属性

- (NSArray *)getAllProperties

{

    u_int count;

    objc_property_t *properties  =class_copyPropertyList([self class], &count);

    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];

    for (int i = 0; i<count; i++)

    {

        const char* propertyName =property_getName(properties[i]);

        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];

    }

    free(properties);

    return propertiesArray;

}


//Model 到字典

- (NSDictionary *)properties_aps

{

    NSMutableDictionary *props = [NSMutableDictionary dictionary];

    unsigned int outCount, i;

    objc_property_t *properties = class_copyPropertyList([self class], &outCount);

    for (i = 0; i<outCount; i++)

    {

        objc_property_t property = properties[i];

        const char* char_f =property_getName(property);

        NSString *propertyName = [NSString stringWithUTF8String:char_f];

        id propertyValue = [self valueForKey:(NSString *)propertyName];

        if (propertyValue) [props setObject:propertyValue forKey:propertyName];

    }

    free(properties);

    return props;

}

没有更多推荐了,返回首页