GVKun编程网logo

iphone – 在Objective-C/Cocoa Touch中的HTML字符解码(ios解析html)

10

在本文中,我们将给您介绍关于iphone–在Objective-C/CocoaTouch中的HTML字符解码的详细内容,并且为您解答ios解析html的相关问题,此外,我们还将为您提供关于c#–Mon

在本文中,我们将给您介绍关于iphone – 在Objective-C/Cocoa Touch中的HTML字符解码的详细内容,并且为您解答ios解析html的相关问题,此外,我们还将为您提供关于c# – MonoTouch v.Objective-C for new iPhone devs、iphone – 为Apple不可知论者学习Objective-C/C++ocoa的时间、iphone – 你在编写Objective-C和Cocoa时使用的最佳实践是什么?、iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备的知识。

本文目录一览:

iphone – 在Objective-C/Cocoa Touch中的HTML字符解码(ios解析html)

iphone – 在Objective-C/Cocoa Touch中的HTML字符解码(ios解析html)

首先,我发现这个: Objective C HTML escape/unescape,但它不适合我。

我的编码字符(来自RSS Feed,btw)看起来像这样:&

我搜索所有的网络和发现相关的讨论,但没有解决我的特定编码,我认为他们被称为十六进制字符。

解决方法

那些被称为 Character Entity References.当他们采取&#<号码>的形式;它们被称为数字实体引用。基本上,它是应该替换的字节的字符串表示。在&#038的情况下,它表示ISO-8859-1字符编码方案中的值为38的字符,即&

和号必须在RSS中编码的原因是它是一个保留的特殊字符。

你需要做的是解析字符串,并用与&#和;之间的值匹配的字节替换实体。我不知道有任何伟大的方式来做这个目标C,但this stack overflow question可能是一些帮助。

编辑:自从回答这两年前有一些伟大的解决方案;参见下面的迈克尔瀑布的答案。

c# – MonoTouch v.Objective-C for new iPhone devs

c# – MonoTouch v.Objective-C for new iPhone devs

我正在与一家小型创业公司合作,目的是创建一个iPhone应用程序.我们团队中的程序员都知道C和 Java,但是我们没有ObjC/C++#/ iPhone体验 – 我们将会学习一些东西,无论什么.所有我在这个问题上看到的问题都是从C#程序员进入iOS的角度,所以我没有任何关于学习一个或另一个的相对优点的信息.

所以,我想知道的是C#和Objective-C对于新程序员的相对优点,在这些方面:

>表现
>使用方便
>轻松学习
>可靠性(即,新的iOS版本是否会破坏MonoTouch应用程序?)

此外,在MonoTouch中撰写的内容对于使用Android的跨平台开发有什么好处?

解决方法

如果您的创业的目标是创建一个iPhone应用程序,那么显然你应该学习iOS应用程序与Objective-C一起构建的语言.您的团队已经有了C的经验,所以开始应该很容易. The Big Nerd Ranch books将让您在一两个礼拜中开始运行(我不与Big Nerd Ranch联系,我只是认为他们很棒).

我不明白为什么你带上MonoTouch,考虑到你的团队没有C#/ .NET的经验.有许多其他框架,如MonoTouch,包括Titanium SDK(JavaScript),RubyMotion(Ruby)等等.所有这些都是伟大的,但正如我所看到的,主要是那些有各自语言经验的人.它们允许您使用您更熟悉的语言编写iOS应用程序,但具有以下缺点:

>性能可以和Objective-C中写的应用程序一样好,但通常有一点(有时甚至很多).
>学习资源不如iOS SDK / Objective-C那么丰富.有许多人想要制作iOS应用程序,而那些人有些使用这些框架,并且在它们之间被稀释.只有少部分可用于iOS开发的资源将用于任何给定的框架.
>这些框架基于iOS SDK / Objective-C,所以自然的发展总是落后于后.如果苹果在下一个版本的iOS SDK中推出了新的API,那么您必须等待这些框架的适应性(用Objective-C编写的应用程序可能会中断,但是将更容易处理基于点#2).
>大多数这些框架需要熟悉iOS SDK.您仍然需要知道应用程序在启动时调用 – (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法,但另外您还需要记住如何将其转换为适当的方法MonoTouch:public override bool FinishedLaunching(UIApplication app,NSDictionary options). iOS SDK是巨大的,大多数iOS开发人员依靠苹果的文档来了解.因此,您将看到针对Objective-C编写的api文档,并将方法转换为您选择的框架.
> Objective-C生态系统不断发展,酷派新项目如CocoaPods,bwoken等.这些主要是开发Objective-C和Xcode.配置它们与您选择的框架一起工作几乎总是会导致您额外的时间和工作.

上述几点总体上使我不会太多地研究任何这些其他框架.他们都很酷,但是他们在采用方面的主要优点似乎是促进了Objective-C之外的深入技能的人员的开发,或允许小团队的跨平台开发缺乏投入Android和iOS的资源(和Windows Phone)程序员.希望利益超过上述用户的成本.

Also,would writing in MonoTouch have any benefits for cross-platform development with Android?

我想是这样.事实上,MonoTouch homepage将这作为使用框架的主要优点.我不太了解view / controller类,因为这些类似于将它们绑定到UIKit中,但封装在模型中的逻辑应该是相当容易的端口.

漫长的故事,我想你和你的团队应该坚持使用Objective-C进行iOS开发.

iphone – 为Apple不可知论者学习Objective-C/C++ocoa的时间

iphone – 为Apple不可知论者学习Objective-C/C++ocoa的时间

这个问题不可避免地是主观的,但无论如何我都会问.

我是个电脑.我一直都是个人电脑.虽然我对* nix感到非常满意,但我对Apple的专业知识很少.我有很多开发经验,并且认为我能够比大多数同事更快地学习新的语言和概念(尽管ML / F#仍然会定期让我受伤).我对C很熟悉,虽然自九十年代以来没有触及它,每天都在工作,并且对C#有100%的信心,会认为自己是先进的Java专家,并在Lisp中开发了大量的东西. Prolog回到了当天.

我们最近有一个开发iPhone应用程序的请求,这听起来像我们非常感兴趣的一个有趣的主张.我们对Apple平台的内部经验很少.鉴于我们对Apple的大多数事情一无所知,对OSX和Apple UI范例几乎没有熟悉,并假设我们获得了必要的开发硬件:

>需要学习什么?
>优秀的开发人员需要多长时间才能加快速度?
>追求这条路线可能会产生任何非明显的开支吗?

再一次,为这个问题的主观性质道歉.非常感谢.

解决方法

我花了几个月才感到舒服;但那只是晚上/周末.我来自PC / VC背景,从未拥有过Mac.

Objective-C可以,如果有点不寻常.有一些常见的问题,你学习一次,然后不再做.恕我直言,它比C更容易射击自己,但切换并不是什么大不了的事.我认为更大的学习曲线是XCode;它肯定不是Visual Studio上的一个补丁,可能需要一点时间.也就是说,每次发布都会越来越好.最让我烦恼的一件事是Mac键盘与PC键盘 – 特别是在IDE中 – 我一直跳到文件末尾而不是行尾等等.然后回到PC找到你保存等不是相同的组合键.它会变得非常混乱.

Mac& OS X是一股清新的空气 – 希望我早一点.我买了一台iMac 24来获得足够的屏幕空间.这是一台可爱的机器.

对于Cocoa,在采用手机应用程序之前,我采用了一种稍微不同寻常的Mac应用程序启动方式.我使用了“可可编程为Max OS X”这本书给了我很好的基础.然后我转到’开始iPhone开发’.我认为这种方法对我来说效果很好,因为Mac OS是一个更大的图景,而iphone是一个子集 – 它帮助我了解事情是如何组合在一起的.我还买了几本关于linux,mac internals等的书……我需要填补我的知识空白.我发现我需要对终端感到非常舒服,并阅读一本关于bash shell的书,并完善了我对’vim’的使用.我还沿途发现了’git’并且没有回头.

对于手机本身,你真的需要一个设备,而不仅仅是模拟器;我发现模拟器与设备不匹配的几个问题(特别是如果你打算使用OpenGL ES) – 因此我将测试iphone 3G / 3GS&触摸.信用到期;我发现的所有差异都是我的代码中的问题,需要修复才能使它在模拟器和设备上看起来相同.如果您已经完成了任何器件编程,它可能是您曾经使用过的最好的器件编程平台 – 简单而稳定,调试良好.

我说费用是一台Mac 2 iphone ipod touch,价值200美元的书……还没有找到任何隐藏的费用……

iphone – 你在编写Objective-C和Cocoa时使用的最佳实践是什么?

iphone – 你在编写Objective-C和Cocoa时使用的最佳实践是什么?

我知道 HIG(这是相当方便!),但你编写Objective-C时使用的编程实践,更具体地说,当使用Cocoa(或CocoaTouch)。

解决方法

有一些事情,我已经开始做,我不认为是标准的:

1)随着属性的出现,我不再使用“_”前缀“私有”类变量。毕竟,如果一个变量可以被其他类访问,应该没有一个属性呢?我总是不喜欢“_”前缀使代码更丑陋,现在我可以离开它。

2)说到私人东西,我更喜欢把.m文件中的私有方法定义放在类扩展中,如:

#import "MyClass.h"

@interface MyClass ()
- (void) someMethod;
- (void) someOtherMethod;
@end

@implementation MyClass

为什么杂乱的.h文件与外人不应该关心的事情? empty()适用于.m文件中的私有类别,如果不实现声明的方法,则会发出编译警告。

3)我已经把dealloc放在.m文件的顶部,就在@synthesize指令下面。不应该你dealloc是在你想在一个类中想到的事情的列表的顶部?这在iPhone的环境中尤其如此。

3.5)在表格单元格中,使每个元素(包括单元格本身)对于性能是不透明的。这意味着在一切中设置适当的背景颜色。

3.6)当使用NSURLConnection时,作为一个规则,你可能希望实现委托方法:

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                  willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
      return nil;
}

我发现大多数Web调用都是非常奇异的,它是更多的例外,比你想要的响应缓存,特别是对于Web服务调用的规则。实现如图所示的方法禁用缓存响应。

还有一些好的iPhone的具体提示从Joseph Mattiello(在iPhone邮件列表中收到)。还有更多,但这些是最普遍有用的我想(注意,一些位现在已被略微编辑从原来包括响应中提供的详细信息):

4)如果你必须使用双精度,例如在使用CoreLocation时。确保你结束你的常量在’f’,使gcc存储为浮点。

float val = someFloat * 2.2f;

这是最重要的,当someFloat可能实际上是一个双,你不需要混合模式数学,因为你失去在存储上的’val’的精度。虽然iPhone上的硬件支持浮点数,但与单精度相比,执行双精度算术可能需要更多时间。参考文献:

> Double vs float on the iPhone
> iPhone/iPad double precision math

在较老的手机上,假定计算以相同的速度运行,但是在寄存器中可以具有比双精度更多的单精度分量,因此对于许多计算,单精度将最终更快。

5)将属性设置为非原子。默认情况下它们是原子的,并且在合成时,将创建信号量代码以防止多线程问题。 99%的人可能不需要担心这一点,并且当设置为非原子时,代码更少膨胀和更高的记忆效率。

6)sqlite可以是一个非常,非常快速的方式来缓存大数据集。地图应用程序实例可以将其图块缓存到sqlite文件中。最昂贵的部分是磁盘I / O。通过发送BEGIN避免许多小写;和COMMIT;大块之间。我们使用2秒定时器,例如在每次新提交时重置。当它到期时,我们发送COMMIT; ,这将导致所有的写入进入一个大块。 sqlite将事务数据存储到磁盘,并执行此操作开始/结束包装避免创建许多事务文件,将所有事务分组到一个文件中。

此外,如果它在你的主线程,sql会阻塞你的GUI。如果您有一个很长的查询,最好将查询存储为静态对象,并在单独的线程上运行sql。确保在@synchronize(){}块中包装任何修改数据库的查询字符串。对于简短的查询,只需在主线程上留下更方便的东西。

更多sqlite优化提示在这里,虽然文档显示过时很多点可能还是不错的;

http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备

iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备

我根据不同的来源编写了以下UIDevice类别.我已经升级了platformCode方法,所以它的低级别低于可见度.

这很好用,但是platformCode方法是低级的.你知道这种呼叫是否可以用Cocoa Touch代码替换?这是相关的代码:

UIDevice_enhanced.h

@interface UIDevice (Enhanced)

typedef enum {
    kUnkNownPlatform = 0,kiPhone1G,kiPhone3G,kiPhone3GS,kiPhone4,kiPhone4Verizon,kiPhone4S,kiPodTouch1G,kiPodTouch2G,kiPodTouch3G,kiPodTouch4G,kiPad,kiPad2Wifi,kiPad2GSM,kiPad2CMDA,kSimulator
} PlatformType;

- (Nsstring *) platformName;
- (PlatformType) platform;

@end

UIDevice_enhanced.m

#import "UIDevice_enhanced.h"
#include <sys/utsname.h>

@interface UIDevice (Enhanced)
- (Nsstring *) platformCode;
@end 


@implementation UIDevice (Enhanced)

// Utility method (private)
- (Nsstring*) platformCode {
    struct utsname systemInfo;
    uname(&systemInfo);
    Nsstring* platform =  [Nsstring stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

    return platform;
}

// Public method to use
- (Nsstring*) platformName {
    Nsstring* platform = [self platformCode];

    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";
    if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,2"])    return @"Verizon iPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";

    return platform;
}

// Public method to use
- (PlatformType) platform {
    Nsstring *platform = [self platformCode];
    if ([platform isEqualToString:@"iPhone1,1"])    return kiPhone1G;
    if ([platform isEqualToString:@"iPhone1,2"])    return kiPhone3G;
    if ([platform isEqualToString:@"iPhone2,1"])    return kiPhone3GS;
    if ([platform isEqualToString:@"iPhone3,1"])    return kiPhone4;
    if ([platform isEqualToString:@"iPhone3,2"])    return kiPhone4Verizon;
    if ([platform isEqualToString:@"iPhone4,1"])    return kiPhone4S;
    if ([platform isEqualToString:@"iPod1,1"])      return kiPodTouch1G;
    if ([platform isEqualToString:@"iPod2,1"])      return kiPodTouch2G;
    if ([platform isEqualToString:@"iPod3,1"])      return kiPodTouch3G;
    if ([platform isEqualToString:@"iPod4,1"])      return kiPodTouch4G;
    if ([platform isEqualToString:@"iPad1,1"])      return kiPad;
    if ([platform isEqualToString:@"iPad2,1"])      return kiPad2Wifi;
    if ([platform isEqualToString:@"iPad2,2"])      return kiPad2GSM;
    if ([platform isEqualToString:@"iPad2,3"])      return kiPad2CMDA;
    if ([platform isEqualToString:@"i386"])         return kSimulator;

    return kUnkNownPlatform;
}

@end

解决方法

这可能被视为一种“客观-c”方式:

// Utility method (private)
- (Nsstring *)platformCode {
    // This may or not be necessary 
    // Im not sure if you can have a device thats not currentDevice can you?
    // if ([self isEqual:[UIDevice currentDevice]]) {

    Nsstring* platform =  [[self.systemName copy] autorelease];
    return platform;

    // Could probably shorten to just
    // return [[self.systemName copy] autorelease];

    // or - return [Nsstring stringWithString:self.systemName];
}

这将是utsname机器的obj-c版本(从这一行:Nsstring * platform = [Nsstring stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];).

utsname

The <sys/utsname.h> header defines structure utsname,which includes
at least the following members:

char sysname[]   name of this implementation of the operating system
char nodename[] name of this node within an implementation-dependent
communications network
char release[]   current release level of
this implementation
char version[]   current version level of this
release
char machine[]   name of the hardware type on which the
system is running

UIDevice Class Reference:

systemName The name of the operating system running on the device
represented by the receiver. (read-only)
@property (nonatomic,readonly,retain) Nsstring *system

但是,由于systemName只返回@“iPhone OS”,要获取实际的设备型号,您必须使用c代码.这是另一种方法:

#include <sys/types.h>
#include <sys/sysctl.h>

- (Nsstring *)machine {
     size_t size;

    // Set 'oldp' parameter to NULL to get the size of the data
    // returned so we can allocate appropriate amount of space
    sysctlbyname("hw.machine",NULL,&size,0); 

    // Allocate the space to store name
    char *name = malloc(size);

    // Get the platform name
    sysctlbyname("hw.machine",name,0);

    // Place name into a string
    Nsstring *machine = [Nsstring stringWithCString:name];

    // Done with this
    free(name);

    return machine;
}

今天关于iphone – 在Objective-C/Cocoa Touch中的HTML字符解码ios解析html的讲解已经结束,谢谢您的阅读,如果想了解更多关于c# – MonoTouch v.Objective-C for new iPhone devs、iphone – 为Apple不可知论者学习Objective-C/C++ocoa的时间、iphone – 你在编写Objective-C和Cocoa时使用的最佳实践是什么?、iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备的相关知识,请在本站搜索。

本文标签: