Enhanced RTTI
Syntax
RTTI enables you to easily retrieve details on the methods, fields and properties of a class.
TRttiType = class(TRttiNamedObject)
public
  ...
  function GetMethods: TArray<TRttiMethod>; overload; virtual;
  function GetFields: TArray<TRttiField>; virtual;
  function GetProperties: TArray<TRttiProperty>; virtual;

  function GetMethod(const AName: string): TRttiMethod; virtual;
  function GetMethods(const AName: string): TArray<TRttiMethod>; overload; virtual;
  function GetField(const AName: string): TRttiField; virtual;
  function GetProperty(const AName: string): TRttiProperty; virtual;

  function GetDeclaredMethods: TArray<TRttiMethod>; virtual;
  function GetDeclaredProperties: TArray<TRttiProperty>; virtual;
  function GetDeclaredFields: TArray<TRttiField>; virtual;

  // The ancestor for types with ancestors.
  property BaseType: TRttiType read GetBaseType;
  ...
end;
It provides methods to easily get or set the value of a field.
TRttiField = class(TRttiMember)
public
  ...
  property FieldType: TRttiType read GetFieldType;
  function GetValue(Instance: Pointer): TValue; virtual;
  procedure SetValue(Instance: Pointer; const AValue: TValue); virtual;
  function ToString: string; override;
  ...
end;
Information on class methods including their return types and parameters can be easily discovered. Invoking the method is also made easy.
TRttiMethod = class(TRttiMember)
public
  ...
  function Invoke(Instance: TObject; const Args: array of TValue): TValue; overload;
  function GetParameters: TArray<TRttiParameter>; virtual; abstract;
  function ToString: string; override;
  property ReturnType: TRttiType read GetReturnType;
  property IsConstructor: Boolean read GetIsConstructor;
  property IsDestructor: Boolean read GetIsDestructor;
  ...
end;
$RTTI
Controls which elements RTTI is generated for
$WEAKLINKRTTI
Reduces the amount of RTTI emitted into your executable reducing its size. Do not use this if you want to make use of RTTI within your application.
$STRONGLINKTYPES
Setting {$STRONGLINKTYPES ON} will prevent the smart linker from removing types that are not directly referenced by the application. This will cause significant increase in the size of the executable.
This directive is listed as new for Delphi XE but available but undocumented in D2010.
Notes
Further reading
Introductory Tutorials
Comprehensive Tutorials
TRttiContext
TValue
TRTTIType
Performance
A discussion about the speed difference between the old and new RTTI.
https://forums.embarcadero.com/thread.jspa?threadID=50113
Mason Wheeler on TValue performance
http://tech.turbu-rpg.com/100/tvalue-is-very-slow
Iztok Kacin compares the performance of TValue to variants, variant records and other similar structures.
http://www.cromis.net/blog/2010/03/tvalue-and-other-variable-like-implementation-tests/
Reducing executable size
Barry Kelly comments on reducing the amount of RTTI generated to stop execution size rising.
http://blogs.embarcadero.com/michaelrozlog/2009/08/31/36979#comment-1400
Exploring RTTI
Rodrigo Ruz has some articles on exploring the RTTI of an application.
Barry Kelly on using $STRONGLINKTYPES to include more RTTI data in your application.
http://stackoverflow.com/questions/2997761/delphi-rtti-unable-to-find-interface/3063748#3063748
Omissions in the RTTI
Eric Grange lists elements that currently have no RTTI generated for them.
http://delphitools.info/2010/09/15/missing-bits-in-delphi-rtti/
Mason Wheeler talks about the lack of RTTI for generic interfaces.
http://tech.turbu-rpg.com/194/rtti-errors-and-omissions-in-delphi-xe
Alex Ciobanu (Emb.) gives a workaround for the lack of RTTI for records
http://alex.ciobanu.org/?p=55
use cases
Daniele Teti discusses serializing objects to JSON.
http://www.danieleteti.it/?p=146
Daniele Teti is working on a Delphi Object Relational Mapper
http://www.danieleteti.it/?p=250
Mason Wheeler speculates on how a native LINQ could be build with the new RTTI.
http://tech.turbu-rpg.com/197/native-linq-under-active-development
Mason Wheeler is building a scripting engine using the new RTTI.
http://tech.turbu-rpg.com/296/rtti-generation-code-now-available
Mason Wheeler uses RTTI to get access to a private variable.
http://tech.turbu-rpg.com/79/abusing-extended-rtti-for-fun-and-profit
Robert Love persists objects to INI files with RTTI.
http://robstechcorner.blogspot.com/2009/10/ini-persistence-rtti-way.html